【解決】NginxのサイトをSSL化しても証明書の警告が出る問題

ノウハウ

はじめに

どーもなんしらです。今回ですが、このサイトの抱えていた問題についてまとめようと思います。
このサイトはNginx+WordPressで作っており、SSLはLet’s Encryptという無料サービスを使って実装しています。
ただ、SSL化した後でも、一部の端末(iPhone等)で、下記のような警告が出てしまっており、原因がわからずにいました。。

もちろんiPhoneの時刻は問題ないし、証明書の有効期限は切れていません

ただ、いろいろ調べていくうちに、Nginx特有の原因があることがわかり、設定を修正することでこの警告を消すことに成功しました!

SSL証明書の警告が出ていた原因は?

SSL化の手順の中で証明書の場所をWebサーバに教えてあげるのですが、apacheであれば、cert.pemという証明書ファイルと、chain.pemという中間証明書を指定してあげればOKなのです。
しかしNginxの場合、中間証明書を設定する項目自体が存在しなかったのです。
Nginxでは、設定ファイルであるnginx.confの中で、
サーバ証明書と中間証明書を連結したファイルfullchain.pem
というファイルを指定してあげる必要があるのです!!

下記画像は、警告が出ていた時のnginx.confの中身となります。
ssl_certificateという項目でサーバ証明書ファイルを指定するのですが、
見てのとおり、”cert.pem”を指定してしまっておりました。。。

nginx.confのsslに関する設定を一部抜粋

この設定でもPCやAndroid等では特に警告は出なかったのですが、iPhoneではSSLに関する警告が出てしまいました。。
そのため下記画像のように、”cert.pem”を”fullchain.pem”に変更をしたところ、見事iPhoneでも警告が表示されなくなりました!!
(Let’s Encryptでは証明書を発行する際、cert.pemとfullchain.pemの両方が自動作成されます。)

ssl_certificateの指定をcert.pem⇒fullchain.pemに変更

本問題に気付けたきっかけとなったのは下記サイトとなります。

404 Not Found - Qiita - Qiita

記事に書いている通り、Nginx, Postfix, Dovecot等一部ソフトでは、中間証明書を指定する項目がないため、cert.pemではなく、fullchain.pemを指定する必要があるそうです。

さいごに

この問題に数か月悩んでいたので、原因がわかりとってもすっきりしました!!
ウエブサイトを表示する際に警告が出てしまうのは、集客という観点でも致命的だと思うので。。
※そもそも私がNginx+SSL化の記事をちゃんと見ていれば当たらなかった問題ですが。。笑
この問題にあたっている人は少なからずいると思うので、お役に立てれば幸いです。

コメント