Let's Encrypt DST Root X3ルート証明書期限切れ問題の対処
2021年9月30日 had come on my Let's Encrypt certification
自家用だし大丈夫だろうとたかを括っていたDST Root X3ルート証明書期限切れ問題。
しかし2021年9月30日以降Chromeで"NET::ERR_CERT_DATE_INVALID"発生。
"--force-renew"をつけて"certbot"を叩いて証明書再取得してもダメだったためしばらく放置していたが、重い腰を上げて調査を始めた。
"openssl s_client サイト名:443"
"openssl s_client"で自サイトを調べてみる。
注)自サイトは"hoge.hoge"に置換してます。
注2)サーバーはCentOS7.9.2009、httpdはApache/2.4.6 (CentOS)、openssl-1.0.2k-21
echo|openssl s_client -connect hoge.hoge:443
CONNECTED(00000005)
depth=0 CN = hoge.hoge
verify error:num=20:unable to get local issuer certificate
verify return:1
depth=0 CN = hoge.hoge
verify error:num=21:unable to verify the first certificate
verify return:1
---
Certificate chain
0 s:/CN=hoge.hoge
i:/C=US/O=Let's Encrypt/CN=R3
---
Server certificate
.
.
.
Verify return code: 21 (unable to verify the first certificate)
全く証明書チェーンを辿らない(苦笑)
ググってみた
"Verify return code: 21"を検索してみても、"SSLCertificateFile"で"cert.pem"じゃなくて"fullchain.pem"を使えとかしか出てこない。
https://community.letsencrypt.org/t/verify-return-code-21-unable-to-verify-the-first-certificate/130701/5
/etc/httpd/conf.d/ssl.conf
一応確認のため"/etc/httpd/conf.d/ssl.conf"を見てみると
SSLCertificateFile /etc/letsencrypt/live/hoge.hoge/fullchain.pem
#SSLCertificateChainFile /etc/letsencrypt/live/hoge.hoge/fullchain.pem
"SSLCertificateFile"は"fullchain.pem"に設定されている。
しかし、なぜか"SSLCertificateChainFile"はコメントアウトされている。
- #SSLCertificateChainFile /etc/letsencrypt/live/hoge.hoge/fullchain.pem
+ SSLCertificateChainFile /etc/letsencrypt/live/hoge.hoge/fullchain.pem
ということで有効にして試してみる。
% echo|openssl s_client -connect hoge.hoge:443
CONNECTED(00000005)
depth=1 O = Digital Signature Trust Co., CN = DST Root CA X3
verify error:num=10:certificate has expired
notAfter=Sep 30 14:01:15 2021 GMT
verify return:0
depth=1 O = Digital Signature Trust Co., CN = DST Root CA X3
verify error:num=10:certificate has expired
notAfter=Sep 30 14:01:15 2021 GMT
verify return:0
depth=3 O = Digital Signature Trust Co., CN = DST Root CA X3
verify error:num=10:certificate has expired
notAfter=Sep 30 14:01:15 2021 GMT
verify return:0
---
Certificate chain
0 s:/CN=hoge.hoge
i:/C=US/O=Let's Encrypt/CN=R3
1 s:/C=US/O=Let's Encrypt/CN=R3
i:/C=US/O=Internet Security Research Group/CN=ISRG Root X1
2 s:/C=US/O=Internet Security Research Group/CN=ISRG Root X1
i:/O=Digital Signature Trust Co./CN=DST Root CA X3
---
Server certificate
.
.
.
Verify return code: 0 (ok)
通った(苦笑)
まとめ
検索してもこの手の情報は出てこなかった(何ページも辿ったら書いてあるのかも知れないが)ので、もしかして同じ事象でハマってる人が1人でも存在したときのためにまとめると
- ApacheHTTPD+Let's Encrypt環境において、"SSLCertificateChainFile"がコメントアウトされている環境が(ウチに)あった。
- 2021年9月30日までは"SSLCertificateChainFile"をコメントアウトしていても問題なかった。
- DST Root X3ルート証明書の期限切れ後、"SSLCertificateChainFile /etc/letsencrypt/live/hoge.hoge/fullchain.pem" のように、証明書チェーンを明示的に渡してあげないとChromeで"NET::ERR_CERT_DATE_INVALID"が発生するようになった。
Discussion