このブログのSSL設定とかの話。

前Cipher Suitesの話をしたのでこのブログのSSL設定を紹介します。Webサーバはnginxです。
試験的にtag.retrorocket.bizにだけh2oを使ってるのですが、なかなかいい感じなのでそのうち乗り換えるかもしれません。
サブドメインで運用しているサービスは一部設定が足りてなかったりしてSSL LabsでA+じゃなかったりするのですが、AかA-なので及第点と思っています。retrorocket.bizはA+です。
SSL Server Test (Powered by Qualys SSL Labs)
http/2には対応済みです。

設定の一部

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

ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers 'ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!DSS';
ssl_prefer_server_ciphers on;

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

ssl_stapling on;
ssl_stapling_verify on;
ssl_trusted_certificate /etc/nginx/ssl/ca-certs.crt;

resolver 8.8.8.8 8.8.4.4 valid=300s;

設定の根拠

基本的に「瀕死のリテラシー メカニカルに殺す」「世の中のいけてるところが推奨しているものは信頼できるもの」、という考えなので、MozillaWikiのIntermediate compatibilityの設定を使用しています。
Security/Server Side TLS – MozillaWiki
Modernの設定に寄せたいので、TLS1.0は切っていいかなと思ってアクセスログを見たのですが、利用者にAndroid4系の人がめちゃくちゃ多いので諦めました。
openssl 1.1.0以上を使用しているとCHACHA20-POLY1305が使用できます。
新しいTLSの暗号方式ChaCha20-Poly1305 – ぼちぼち日記

参考にしたサイト等

自分で理解しないまま設定するのは絶対避けたいので、以下のサイトを参考にしています。
理解してるつもりの SSL/TLS でも、もっと理解したら面白かった話 · けんごのお屋敷
httpsだからというだけで安全?調べたら怖くなってきたSSLの話!? – Qiita
我々はどのようにして安全なHTTPS通信を提供すれば良いか – Qiita
OCSP StaplingはMozillaWiki見るまで知らなかったので勉強になりました。

Start SSLの証明書で運用しているサービスはそろそろ証明書更新の時期なので、Let’s Encryptに乗り換えようと思っています。