Let’s EncryptでSSL/TLS動作させるときの注意点
無料で利用できるSSLとして人気があるLet’s Encryptですが、Nginxサーバーに設定するときに注意点が1つあります。
検索でヒットしたサイトの情報を見て、そっくりそのまま設定すると正しく出来ていないかもしれません。
そんなときには、
「信頼された証明機関がこの証明書を確認できません。」とか
「この接続はプライバシーが保護されていません」とか、「NET::ERR_CERT_AUTHORITY_INVALID」
などと、利用者のブラウザ画面に表示されてしまっていて、見てもらうことなく逃げられているかもしれません。
Let’s EncryptでSSL証明書の発行申請をすると、cert.pemなど4種類の証明書が発行されます。
これをサーバーに設定するとき、
- cert.pem
- privkey.pem
を指し示すリンクにconfファイルを書き換えればよさそうで、実際そう説明している解説サイトが多数あります…。これでも動作し、何のエラーや指摘も出ないブラウザもあります。
しかし、この設定では「信頼された証明機関がこの証明書を確認できません。」といった類のエラーメッセージが出るブラウザも多数あるのが事実です。
このメッセージが出る理由は、中間CA証明書がサーバーに設定されていないためです。
実は、発行された証明書のなかに、chain.pemがちゃん含まれていて、これが中間CA証明書なのです。ただし、nginxにはchain.pemを設定する項目自体がないのです!
ではどうするのか?というと、cert.pemにchain.pemを含めてやって、それをcert部分に設定すればよいのです。
そうか!と、
cat cert.pem chain.pem > cert.pem
なんてする必要はありません。
Let’s Encryptは、ちゃんとSSL/TLS サーバ証明書(公開鍵を含む)と中間証明書の両方が含まれているfullchain.pemファイルを用意してくれているのです。
これが、cert.pem
と chain.pem
の内容が結合されたものになっています。
結論
Nginxに設定する場合、cert.pemの代わりにfullchain.pemを設定すればいいよ!
TIPS
- –nginxを付けて実行すれば、バーチャルドメイン設定にしている場合正しく設定されます
- Let’s Encryptの証明書はpemになっていますので、DER や PFX などの他の形式のファイルが必要な場合には openssl を使用して変換する必要があります