HTTPS の設定

この記事は1年以上前に書かれたものです。 情報が古い可能性があります。

当ブログの SSL/TLS 設定を変えたのでメモ。
内容的にはよくあるやつ。

変更前。

変更後。

まずは状況確認から。
皆さんおなじみ SSL Server Test (https://www.ssllabs.com/ssltest/)

最初は適当に作ったコンフィグだったので、もっと悪いかと思ってたけど B だからそんなひどくもないっぽい。
Let’s encrypt が偉大過ぎた(;・∀・)

せっかくなのでもう少しだけ強化しとこうということで、設定いじいじ。

前提として、当ブログはリバースプロキシで HTTPS 終端を行い、wordpress まで HTTP でつないでいるため、リバースプロキシにしている Nginx で設定を行います。

TLS1.3 はまだ出たばっかりでややこしそうだったので、1.2 までで頑張る。
ググりながら見ていくと

1) ssl_protocols の設定
2) ssl_ciphers の設定
3) ssh_dhparam の設定
4) HSTS ヘッダの設定

が大事らしい。

1) ssl_protocols の設定

プロトコルを指定して、古いプロトコルを除外する設定。デフォルトで問題ないらしい。

2) ssl_ciphers の設定

cipher は利用するアルゴリズムの組み合わせのこと。

ssl_prefer_server_ciphers on;

次にアルゴリズムを指定するんだけど、拾ってきたものをそのまま貼ったら全然ダメだったぽくて逆に下がった…orz
調べたんだけど、正直どれが優秀な組み合わせかなんてわからない。

そんなときに Mozilla さんに出会いました!
https://ssl-config.mozilla.org/

ここで作れるコンフィグの ciphers をそのままコピー。

    ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;

3) ssh_dhparam の設定

DH 鍵交換の設定。まずは鍵の生成が必要らしい。
ディレクトリもなかったので適当に作成。
$ openssl dhparam 2048 -out /etc/nginx/ssl/dhparam_2048.pem

config には次の設定を記載。
ssl_dhparam /etc/nginx/ssl/dhparam_2048.pem;

4) HSTS ヘッダの設定

HTTPS で通信するようクライアントに伝える設定。どっかから拾ってきたやつに元から入ってた。

add_header Strict-Transport-Security max-age=15768000;

以上。
最終的にはこんな感じになった。nginx.conf に書くほうがいいものもあるけど、いったんこれで。

server {
    listen 80;
    listen [::]:80;

    server_name www.naokilog.com;

    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl;
    listen [::]:443 ssl;

    server_name www.naokilog.com;

    # 証明書チェーン
    ssl_certificate <証明書の PATH>/fullchain.pem;
    # 自身の証明書を除いた証明書チェーン (OCSP 対応用)
    ssl_trusted_certificate <証明書の PAHT>/chain.pem;
    # 秘密鍵
    ssl_certificate_key <秘密鍵の PATH>.privkey.pem;
    ssl_session_timeout 1d;
    ssl_session_cache shared:SSL:50m;

    ssl_dhparam /etc/nginx/ssl/dhparam_2048.pem;

    ssl_protocols TLSv1.2;
    ssl_prefer_server_ciphers on;
    ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;

    # HSTS ヘッダ
    add_header Strict-Transport-Security max-age=15768000;

    # OCSP 対応
    ssl_stapling on;
    ssl_stapling_verify on;

    resolver 1.1.1.1 8.8.4.4;

    # proxy config
    proxy_set_header    Host    $host;
    proxy_set_header    X-Real-IP    $remote_addr;
    proxy_set_header    X-Forwarded-Host       $host;
    proxy_set_header    X-Forwarded-Server    $host;
    proxy_set_header    X-Forwarded-Proto    https;
    proxy_set_header    X-Forwarded-For    $proxy_add_x_forwarded_for;
    proxy_hide_header   X-Powered-By;

    location / {
        proxy_pass http://<転送先IPアドレス>/;
        proxy_redirect http:// https://;
    }

    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }
}

コメント

タイトルとURLをコピーしました