Let’s encryptの証明書の更新がうまくいかないと思ったら、Python3対応のApache pluginがインストールされていなかった件

By | 2017年11月8日 , Last update: 2017年11月15日

はじめに

自分が管理しているサイトでは本サイトも含めてLet’s encryptを絶賛使用中なのですが、Fedora 26だけの現象なのかどうかはわかりませんが、更新がうまくいかないことがあったので、メモっておきます。

スポンサーリンク

インストールの経過

とりあえず、コマンドで更新を試みます。

Let’s encryptから以下のようなタイトルのメールが届くと、そろそろ証明書の更新のタイミングです。

まずは、renewコマンドを実行します。

[root@pnr panda]# certbot renew
Saving debug log to /var/log/letsencrypt/letsencrypt.log

——————————————————————————-
Processing /etc/letsencrypt/renewal/pandanote.info.conf
——————————————————————————-
Cert is due for renewal, auto-renewing…
Could not choose appropriate plugin: The requested apache plugin does not appear to be installed
Attempting to renew cert from /etc/letsencrypt/renewal/pandanote.info.conf produced an unexpected error: The requested apache plugin does not appear to be installed. Skipping.

All renewal attempts failed. The following certs could not be renewed:
/etc/letsencrypt/live/pandanote.info/fullchain.pem (failure)
1 renew failure(s), 0 parse failure(s)

 

なんか、証明書の更新に失敗しているようです(´・ω・`)

コマンド一発でできる予定の作業(それも、今時のWebサーバを運用する上では最も重要と言えなくもない証明書の更新)ができないとなると、かなり焦ります。

ここは、落ち着いてぐぐります。

こういうときに焦ってもロクなことにならないので、とりあえず、お茶でも飲んで落ち着きます。?

そしてエラーメッセージなどを確認してみます。エラーメッセージを保存していなかったので本記事に掲載することはできませんが、エラーメッセージを確認したところ、certbotが依存しているコードがPython2からは使用できないことが原因でcertbotによる証明書の更新に失敗しているらしいというところまでは、見当がつきました。

Python3対応のcertbotパッケージへの更新。

そこで、Python3に対応するパッケージがないかどうか探してみたところ、python3-certbot-apacheというApache pluginがあるらしいことがわかったので、dnfコマンドで早速インストールします。

[root@pnr panda]# dnf install python3-certbot-apache
メタデータの期限切れの確認は、1:26:12 時間前の 2017年11月04日 07時22分21秒 に実施しました。
依存性が解決されました。
================================================================================
パッケージ アーキテクチャ
バージョン リポジトリ サイズ
================================================================================
インストール:
python3-certbot-apache noarch 0.19.0-1.fc26 updates 157 k
アップグレード:
certbot noarch 0.19.0-1.fc26 updates 23 k
python3-acme noarch 0.19.0-1.fc26 updates 183 k
python3-certbot noarch 0.19.0-1.fc26 updates 480 k

トランザクションの要約
================================================================================
インストール 1 パッケージ
アップグレード 3 パッケージ


スポンサーリンク

総ダウンロードサイズ: 843 k
これでいいですか? [y/N]: y
パッケージをダウンロードしています:
(1/4): python3-acme-0.19.0-1.fc26.noarch.rpm 1.0 MB/s | 183 kB 00:00
(2/4): python3-certbot-apache-0.19.0-1.fc26.noa 757 kB/s | 157 kB 00:00
(3/4): python3-certbot-0.19.0-1.fc26.noarch.rpm 1.8 MB/s | 480 kB 00:00
(4/4): certbot-0.19.0-1.fc26.noarch.rpm 260 kB/s | 23 kB 00:00
——————————————————————————–
合計 388 kB/s | 843 kB 00:02
トランザクションの確認を実行中…
トランザクションの確認に成功しました。
トランザクションのテストを実行中…
トランザクションのテストに成功しました。
トランザクションを実行中…
Running scriptlet: None 1/1
準備中 : 1/1
アップグレード : python3-acme-0.19.0-1.fc26.noarch 1/7
アップグレード : python3-certbot-0.19.0-1.fc26.noarch 2/7
インストール : python3-certbot-apache-0.19.0-1.fc26.noarch 3/7
アップグレード : certbot-0.19.0-1.fc26.noarch 4/7
Running scriptlet: certbot-0.19.0-1.fc26.noarch 4/7
ValueError: File context for /etc/(letsencrypt|certbot)/(live|archive)(/.*)? already defined
整理中 : certbot-0.14.1-3.fc26.noarch 5/7
Running scriptlet: certbot-0.14.1-3.fc26.noarch 5/7
整理中 : python3-certbot-0.14.1-3.fc26.noarch 6/7
整理中 : python3-acme-0.14.1-1.fc26.noarch 7/7
Running scriptlet: python3-acme-0.14.1-1.fc26.noarch 7/7
検証中 : python3-certbot-apache-0.19.0-1.fc26.noarch 1/7
検証中 : python3-certbot-0.19.0-1.fc26.noarch 2/7
検証中 : python3-acme-0.19.0-1.fc26.noarch 3/7
検証中 : certbot-0.19.0-1.fc26.noarch 4/7
検証中 : certbot-0.14.1-3.fc26.noarch 5/7
検証中 : python3-certbot-0.14.1-3.fc26.noarch 6/7
検証中 : python3-acme-0.14.1-1.fc26.noarch 7/7

インストール済み:
python3-certbot-apache.noarch 0.19.0-1.fc26

アップグレード済み:
certbot.noarch 0.19.0-1.fc26 python3-acme.noarch 0.19.0-1.fc26
python3-certbot.noarch 0.19.0-1.fc26

完了しました!

 
インストールは成功したようです。

もう一回、コマンドを実行します。

もう一回、certbot renewコマンドを実行します。すると…、

[root@pnr panda]# certbot renew
Saving debug log to /var/log/letsencrypt/letsencrypt.log

——————————————————————————-
Processing /etc/letsencrypt/renewal/pandanote.info.conf
——————————————————————————-
Cert is due for renewal, auto-renewing…
Plugins selected: Authenticator apache, Installer apache
Renewing an existing certificate
Performing the following challenges:
tls-sni-01 challenge for pandanote.info
Waiting for verification…
Cleaning up challenges

——————————————————————————-
new certificate deployed with reload of apache server; fullchain is
/etc/letsencrypt/live/pandanote.info/fullchain.pem
——————————————————————————-

——————————————————————————-
Congratulations, all renewals succeeded. The following certs have been renewed:
/etc/letsencrypt/live/pandanote.info/fullchain.pem (success)
——————————————————————————-
[root@pnr panda]#

 
今度は証明書の更新に成功しました!!

スポンサーリンク

まとめ

Let’s encryptの証明書の有効期限は短いので、「cronで更新できるように設定すればいいじゃん。」って普通は思うわけです。

ところが、Python2が前提だったのがいつの間にかPython3が前提になってしまうというような変更が行われ、かつそれに気づかないと、cronでの更新に失敗するということが何回か起きてから、証明書の有効期限が切れる現象に遭遇してしまうので、原因の追究に手間取ってしまうことになります。そこで、類似の現象が発生したときの原因の解明に役立つと考え、メモっておくことにしました。まさかの時に参考にしていただければ幸いです。

この記事は以上です。