SSLフリー認証局 Let’s Encrypt 更新エラー
4年ぶり更新です。60余齢でいまだにこんな鯖缶をやっている自分を褒めたい。(還暦を過ぎたのでサブタイトルを変更しました。)
先日、管理している複数のCentOS7サーバで、こんなエラーを吐き出した。
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Plugins selected: Authenticator standalone, Installer None
Starting new HTTPS connection (1): acme-v02.api.letsencrypt.org
An unexpected error occurred:
SSLError: (“bad handshake: Error([(‘SSL routines’, ‘ssl3_get_server_certificate’, ‘certificate verify failed’)],)”,)
Please see the logfiles in /var/log/letsencrypt for more details.
どうやらLet’s Encrypt の更新エラーらしい。いくつかのSSLサイトで警告画面が出る。
困った。エラーは心臓に悪い。
こういうときのgoogle先生で、原因はLet’s Encrypt のルート証明書の仕様が変わったためで、「DST Root X3」が certbot で更新できなくなったとのこと。
「Let’s EncryptのルートCA証明書期限切れ、多数のサイトで問題発生」
https://japan.zdnet.com/article/35177496/
「2021年にLet’s Encryptのルート証明書が変更!影響や備えておくべきこととは?」
https://ssl.sakura.ad.jp/column/letsencrypt-root-certificate/
原因がわかれば対応方法があるはず。
いままでパッケージ管理yumでcertbotを更新していたが、このyumの標準パッケージが仕様変更に対応していない、ということがわかったので以下のようにパッケージ管理snapで対応した。
1.まずは既存のcertbotを削除する。
# yum remove certbot
2.EPEL経由でsnapをインストール、起動、シンボリックリンク作成
# yum install snapd
# systemctl enable –now snapd.socket
# ln -s /var/lib/snapd/snap /snap
3.snap経由でcoreをインストール、リフレッシュ
# snap install core
# snap refresh core
4.snap経由でcertbotをインストール、シンボリックリンク作成
# snap install –classic certbot
# ln -s /snap/bin/certbot /usr/bin/certbot
5.apache設定(virtualhostにconf.dを作成)←不要かも
# certbot –apache
6.certbotを手動で更新(インストール時に自動更新cronがつくられる)←不要かも
# certbot renew –dry-run
これでサーバを再起動したら、Let’s Encrypt の更新エラーを吐き出さなくなった。
安堵した。これで心拍数も下がるだろう。
ちなみに、virtualhostを何度か作りかえると、個々のvirtualhostでは問題ないが、cronで一括certbot renewの自動更新ができない場合がある。これは、以下ディレクトリに不要ファイルが残っているためで、実行途中でエラーを吐き出し以降の実行がキャンセルされてしまう。それら不要ファイルを削除すると問題なく自動更新ができる。当初これがわからず半日沼にはまった。
/etc/letsencrypt/renewal/