にほんごのれんしゅう

日本語として伝えるための訓練を兼ねたテクログ

Rapid SSL + nginxでAndroidOSの認証がおかしくなった話

Rapid SSL + nignxでAndroidOSの認証がおかしくなった話

 SSL対応のサイトのほうが、Ajaxなどのインタラクティブなサイトを構築した時に、中間情報が抜かれることが少なくなるので、全SSL化を行ったのだが、AndroidOSでうまく表示されなくなった。

 以前のhttpサーバはapacheであったが、リバースプロキシサーバとして、nginxを採用し、証明書関連をnginx側で持たせるようにした。
 
しばらくして気が付いたのだが、どうやらnginxを新たに導入したことによって、証明書関連の設定が変わってしまったらしい。AndroidOSでアクセスすると、危険なサイトとか言われてひどい言われようだと思う。

nginxでは中間証明署とルート証明書を設定する項目がない。
さて、どうなっているのか。

いろいろ調べたところ、nginxではサーバ証明書と中間証明書とルート証明書をファイル的に三つ結合してひとつの証明書としなければならないらしい。

以下こんな感じになる

 サーバ証明書

-----BEGIN CERTIFICATE-----
サーバ証明書
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
中間証明書
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
ルート証明書
-----END CERTIFICATE-----

 nginx.confの設定

        server {
                listen 443;
                server_name *****;
                ssl_certificate           /etc/nginx/sslkeys/ssl-*****/server.crt;
                ssl_certificate_key       /etc/nginx/sslkeys/ssl-*****/server.key;
                ssl on;
                ssl_session_cache  builtin:1000  shared:SSL:10m;
                ssl_protocols  TLSv1 TLSv1.1 TLSv1.2;
                ssl_ciphers HIGH:!aNULL:!eNULL:!EXPORT:!CAMELLIA:!DES:!MD5:!PSK:!RC4;
                ssl_prefer_server_ciphers on;
                access_log /tmp/access_ssl_*****.jp.log;
                location / {
                        proxy_set_header        Host $host;
                        proxy_set_header        X-Real-IP $remote_addr;
                        proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
                        proxy_set_header        X-Forwarded-Proto $scheme;
                        proxy_pass https://*****;
                        proxy_read_timeout  90;
                        #proxy_redirect http://*****:443 https://*****;
                }
        }

 GeoTrust社の一部署のRapidSSLだけがなぜこんなことに。。。安いからとても助かってますけど。