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

By | 2017年11月8日 , Last update: 2021年2月12日

はじめに

本Webサイトの管理人たるpandaが管理しているサイトでは本サイトも含めて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コマンドで早速インストールします。

※なお、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コマンドを実行します。すると…、

[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の証明書の有効期限は短い(90日)ので、「cronで更新できるように設定すればいいじゃん。」って普通は思うわけです。

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

この記事は以上です。