Let's EncryptでSSL証明書を発行しているサーバで証明書更新に失敗していた。
ログをみると下記のように、CERTIFICATE_VERIFY_FAILEDが出力されていた。
1 |
Attempting to renew cert (hogehoge.example.com) from /etc/letsencrypt/renewal/hogehoge.example.com.conf produced an unexpected error: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:618). Skipping. |
原因
Let's Encryptのルート証明書が変更された件が影響しています。
10/1にDST Root X3が無効となり、Let’s Encryptのルート証明書が更新された。
DST Root CA X3がISRG Root X1に関する証文を追加することで猶予期間が設けられたのですが、
OpenSSL 1.0.2系を使用している場合は、この証文を信頼しないためLet’s Encryptで発行されたSSL証明書の検証に失敗するようです。
Centos7はOpenSSL 1.0.2系である場合が多いため、影響を受けるところは結構あると思う。
解決策
certbotの最新版をインストールして、
--preferred-chain オプションを使用する。
1 2 3 4 5 6 7 8 |
$ certbot --version certbot 0.37.2 $ yum update certbot -y $ certbot --version certbot 1.11.0 $ certbot renew --preferred-chain "ISRG Root X1" --force-renewal |
これでもだめだった人は、正直この状態のサーバではwgetも動かない場合が多いから、
稼働中のCentOS7には酷だが、yum updateは検討する必要がある。
1 2 |
sudo yum update openssl-* -y sudo yum update ca-certificates -y |
または
1 2 |
sudo yum update -y sudo yum update ca-certificates -y |
OpenSSL公式からアナウンスされているその他の解決方法として下記がある。
certbot側が対応しないといけないため、断念した。
- OpenSSL 1.0.2 TLSクライアントがTLSサーバの身元を確認する際に使用するトラストストアから、期限切れのルート証明書(DST Root CA X3)を削除する。
- オプションに-trusted_firstを付与する。
- 最新のACMEプロトコルのクライアントでLet's Encryptにリクエストできる代替証明書チェーンを使用するようにサーバを設定する。
OpenSSL公式は時間がある人は読んでおいたほうがよい。
Let's Encryptのコミュニティでも挙がっていた。
じゃあね〜〜。