Let's Encryptの証明書を使っているサーバにcURLで接続するとSEC_ERROR_UNKNOWN_ISSUERで失敗する

  • 投稿日:
  • by
  • カテゴリ:

Let's Encryptの証明書を使っているサーバにcURLで接続するとSECERRORUNKNOWN_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を参照。