nginx+Let's EncryptサイトにFirefoxからアクセス時SEC_ERROR_UNKNOWN_ISSUERエラー


nginxにcertbot-autoを使ってLet’s EncryptのSSL証明書を当てたとき、FirefoxからアクセスするとSEC_ERROR_UNKNOWN_ISSUERってなるとき。

発行者の証明書が不明であるためこの証明書は信頼されません。
サーバが適正な中間証明書を送信しない可能性があります。
追加のルート証明書をインポートする必要があるでしょう。

って言われるとき。

安全なウェブサイトでのエラーコード "SEC_ERROR_UNKNOWN_ISSUER" の問題解決 | Firefox ヘルプ

結論: ssl_certificateにfullchain.pemを設定する

正しい例

server {
 ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
 ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
}

間違った例

server {
 ssl_certificate /etc/letsencrypt/live/example.com/cert.pem;
 ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
}

中間証明書が必要

エラー文まんまだが中間証明書がないで、ってのが原因なので。

certbot-autoで生成されるのは

  • cert.pem : サーバー証明書
  • chain.pem : 中間証明書
  • fullchain.pem : サーバー証明書 + 中間証明書
  • privkey.pem : 秘密鍵

nginxのserverコンテキストで設定できるのは

  • ssl_certificate : 証明書
  • ssl_certificate_key : 秘密鍵

の2つで、中間証明書用の項目 (SSLCertificateChainFileみたいな) はない。
つまりssl_certificateにサーバー証明書 + 中間証明書しないとダメ。