はじめに
本Webサイトの管理人たるpandaが管理しているサイトでは本サイトも含めてLet’s encryptを絶賛使用中であります。
ただ、Fedora 26だけの現象なのかどうかはわかりませんが、時々証明書の更新がうまくいかないことがあったので、メモっておきます。
インストールの経過
とりあえず、コマンドで更新を試みます。
Let’s encryptから以下のようなタイトルのメールが届くと、そろそろ証明書の更新のタイミングです。
まずは、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コマンドで早速インストールします。
※なお、nginx用のプラグインもあります。Python3対応です。こちらの記事でちょっとだけ書いています。
[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コマンドを実行します。すると…、
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の証明書の有効期限は短い(90日)ので、「cronで更新できるように設定すればいいじゃん。」って普通は思うわけです。
ところが、Python2が前提だったのがいつの間にかPython3が前提になってしまうというような変更が行われ、かつそれに気づかないと、cronでの更新に失敗するということが何回か起きてから、証明書の有効期限が切れる現象に遭遇してしまうので、原因の追究に手間取ってしまうことになります。そこで、類似の現象が発生したときの原因の解明に役立つと考え、メモっておくことにしました。まさかの時に参考にしていただければ幸いです。
この記事は以上です。