Nginx SSLの評価を「A+」に上げる

<景品表示法に基づく表記> 本サイトのコンテンツには、商品プロモーションが含まれている場合があります。

SSLサーバーのテストは Qualys SSL Report を利用します。

ssltest1

nginxのデフォルト設定だと評価が低いので評価を上げる設定を入れていきます。

テストをする際は「Do not show the results on the boards」にチェックを入れて実施します。チェックを入れないと結果が公開されてしまいます。

黄色、赤色を減らす

「DH 1024 bits FS WEAK」暗号に利用する鍵長が短いので2048bitの鍵を作成します。

ssltest2

# cd /etc/nginx/ssl
# openssl dhparam -out dbparam.pem 2048

「Server negotiated HTTP/2 with blacklisted suite」FireFoxでネゴシエーションに失敗しています。ciphersでAESGCMの優先度をHIGHより高く設定します。エラーは出ますが私の環境では正常に表示されるようです。

ssltest3

ssl_ciphers AESGCM:HIGH:!aNULL:!MD5;

「Incorrect certificate because this client doesn’t support SNI」SNIをサポートしていない。名前ベースバーチャルホストを利用するのが標準的になりました。古い環境なので切り捨てます。

ssltest4

「Server closed connection」古い環境なので切り捨てます。

ssltest5

「Client does not support DH parameters > 1024 bits」古い環境なので切り捨てます。

ssltest6

設定

server {
        listen  80;
        listen  443 ssl http2 ;
        server_name     rin-ka.net;
        
        #HTTP/HTTPS 共通化の場合はONにしない
        #ssl on;

        #SSLセッションを1分キャッシュさせる
        ssl_session_cache    shared:SSL:1m;

    #SSLセッションのタイムアウト
        ssl_session_timeout  5m;

    #サーバ指定のcipherにする
        ssl_prefer_server_ciphers  on;

    #利用するcipherを指定
        ssl_ciphers ECDHE:HIGH:!aNULL:!MD5;

    #利用するプロトコルを指定する
        ssl_protocols  TLSv1 TLSv1.1 TLSv1.2;

    #鍵長を 2048ビットにする
        ssl_dhparam /etc/nginx/ssl/dbparam.pem;

    #Strict Transport Security を長期(1年)に指定
        add_header Strict-Transport-Security 'max-age=31536000; includeSubDomains;';

        ssl_certificate /etc/nginx/ssl/rin-ka-fullchain.pem;
        ssl_certificate_key /etc/nginx/ssl/rin-ka-privkey.pem;

}

「A+」の評価が得られました。

ssltest7