Let’s Encryptで作成したSSL証明書をサイトにインストールしてから、Androidのブラウザで確認したらアドレスバーに表示される鍵アイコンが赤色になってました。
結論から言うとApacheの設定が間違っていて、中間証明書の記述が漏れてました。
間違い:
SSLCertificateFile /etc/ssl/example.com/cert.pem SSLCertificateKeyFile /etc/ssl/example.com/private.key.nopass
正解:
SSLCertificateFile /etc/ssl/example.com/cert.pem SSLCertificateKeyFile /etc/ssl/example.com/private.key.nopass SSLCertificateChainFile /etc/ssl/example.com/chain.pem
Let’s Encrypt の証明書はブラウザで信頼済みとして扱われますか?
端的に答えると「イエス」です。
詳しく述べると、Let’s Encrypt の中間証明書は、広く信頼されている米大手認証局(CA)である IdenTrust のルート証明書によってクロス署名されています。
これにより、IdenTrust のルート証明書からチェーンされている限り、Let’s Encrypt の証明書は「信頼された証明書」として扱われます。そのため、IdenTrust のルート証明書を信頼しているほぼ全てのプラットフォームでは、Let’s Encrypt の証明書は「信頼された証明書」となります。
というわけで、SSLCertificateChainFileを設定しましょうということですね。
ちなみにApacheのバージョンが2.4.8以降ならばSSLCertificateFileディレクティブにfullchain.pemを設定すればOKとのことです。
その場合はこういう記述になるはずです。
SSLCertificateFile /etc/ssl/example.com/fullchain.pem SSLCertificateKeyFile /etc/ssl/example.com/private.key.nopass
ブラウザが証明書の検証結果をキャッシュしているようで、サーバの変更後すぐには確認できませんでしたが、10分くらい待って再確認するときちんと信頼られた証明書として確認できました。