先日certbot renew --dry-run
を実行した際に、以下のエラーが発生しました。
Saving debug log to /var/log/letsencrypt/letsencrypt.log
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Processing /etc/letsencrypt/renewal/ドメイン名.com.conf
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Cert is due for renewal, auto-renewing...
Plugins selected: Authenticator apache, Installer apache
Starting new HTTPS connection (1): acme-staging-v02.api.letsencrypt.org
Failed to renew certificate ドメイン名.com with error: __str__ returned non-string (type Error)
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
All simulated renewals failed. The following certificates could not be renewed:
/etc/letsencrypt/live/ドメイン名.com/fullchain.pem (failure)
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1 renew failure(s), 0 parse failure(s)
2ヶ月前までは毎回crontabに設定していたコマンドが自動で証明書を更新していたのに、期限切れの1ヶ月前を過ぎても更新されないので、確認してみたら上記のような状況になっていたのです。今回は、この問題を解決するために行ったことをまとめたいと思います。
環境の確認
このサーバーはあまり使いなれたサーバーではなかったので、まずOSやツール等のバージョンの確認から行いました。OSはCentOS 7、Pythonのバージョンは2.7.5、certbotのバージョンは1.10でした。
更新手順
まず、certbotのアップデートからはじめました。下記のコマンドで、certbotのバージョンが1.11.0にアップデートされました。Python 2系がサポートしている最後のバージョンのようです。
yum update certbot
この更新だけでは。エラーは解消されませんでした。
下記のサイトに類似のエラーで苦しんでいる方々の足跡があったので、そちらを参考に更新を試みました。
https://community.letsencrypt.org/t/connection-error-on-acme-v02-api-letsencrypt-org/162393
まず、上記のサイトで提案されているpythonのライブラリが古いという原因が考えられたので、pipを使ってアップデートしようと思いました。しかし、システムにpipがインストールされていませんでした。そこで、インストールしようとしましたが、Python 2系はサポートが結構前に終了していて、通常のパッケージマネージャーを使ってインストールすることができなくなっているようです。ここで行き詰まったかと思ったのですが、下記のサイトに古いバージョンをインストールする方法がありました。
https://qiita.com/sg0hsmt/items/f8fc8d587bff816654a8
以下のコマンドで、無事pipのインストールに成功しました。
curl https://bootstrap.pypa.io/pip/2.7/get-pip.py -o get-pip.py
python get-pip.py
下記のコマンドで問題の原因になっていそうなパッケージを更新することに成功しました。
pip install urllib3==1.26.7
pip install requests==2.11.1
しかし、改めてcertbotを実行したのですが、全く同じエラーが発生します。次に、上記のサイトで提案されていたもう一つのコマンドを実行しました。
yum install ca-certificates openssl
インストール完了後、certbot renew
コマンドが以前のように正常に動作するようになりました。
まとめ
一時は新しいcertbotをインストールするために、OSのカーネルのアップグレードをしないといけないのではないかという考えまでよぎりましたが、なんとか期限が切れる前にSSL証明書の更新が完了して一安心しました。今回の対応はあくまで一時しのぎですが、近いうちに環境を整えて新しいcertbotをインストールしようと思います。