Let's Encryptの証明書を使っているサーバにcURLで接続するとSEC_ERROR_UNKNOWN_ISSUERで失敗する
Let’s Encryptの証明書を使っているサーバにcURLで接続するとSEC ERROR UNKNOWN_ISSUERで失敗する場合がありました。 ROOT CAは信頼済みになっていますが、中間証明書を信頼できずに失敗していました。 なお、Widows上のGoogle Chromeからは問題ありませんでした。
curl -vの結果は以下のようになっていました。
* Initializing NSS with certpath: sql:/etc/pki/nssdb
* CAfile: cacert.pem
CApath: none
* Server certificate:
* subject: CN=www.sei-yo.jp
* start date: Jul 25 15:26:52 2020 GMT
* expire date: Oct 23 15:26:52 2020 GMT
* common name: www.sei-yo.jp
* issuer: CN=Let's Encrypt Authority X3,O=Let's Encrypt,C=US
* NSS error -8179 (SEC_ERROR_UNKNOWN_ISSUER)
* Peer's Certificate issuer is not recognized.
中間証明書は以下にあります。
https://letsencrypt.org/ja/certificates/
https://letsencrypt.org/certs/lets-encrypt-x3-cross-signed.pem.txt
この中間証明書を信頼済みとして用意することでエラーがなくなります。 その手順は以下です。
CentOSの場合
以下のコマンドを使って信頼する証明書を更新します。
update-ca-trust
信頼したい証明書の拡張子を.pemにして、以下のディレクトリに置いてから上記コマンドを実行すると更新されます。
/etc/pki/ca-trust/source/anchors/
Ubuntuの場合
以下のコマンドを使って信頼する証明書を更新します。
update-ca-certificates
信頼したい証明書の拡張子を.crtにして、以下のディレクトリに置いてから上記コマンドを実行すると更新されます。
/usr/local/share/ca-certificates
詳しくは、man 8 update-ca-certificatesを参照。