WebサイトのSSLの安全性の評価ツールであるSSL SERVER TESTでA+の評価が取れたので、残しておきたいと思います。
環境
CentOS 7.5
Nginx 1.5.1
証明書はLet’s Encryptにて取得しています。
上記環境でのLet’s Encryptの証明書取得に関してはこちらで記事にしています。
nginxのconfファイルに追加したもの
server {
(略)
ssl_protocols TLSv1.2;
ssl_ciphers 'ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-
ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256';
ssl_prefer_server_ciphers on;
ssl_session_cache shared:SSL:50m;
ssl_session_timeout 1d;
ssl_stapling on;
ssl_stapling_verify on;
resolver 8.8.8.8 8.8.4.4 valid=300s;
ssl_trusted_certificate /etc/letsencrypt/live/www.example.com/fullchain.pem;
# www.example.comはそれぞれのドメインに変更してください。
add_header Strict-Transport-Security 'max-age=63072000; includeSubDomains; preload;';
(略)
}
ディレクディブ | 概要 |
---|---|
ssl_protocols | SSL/TLSプロトコルを指定する |
ssl_ciphers | 暗号化スイートリストの指定 |
ssl_prefer_server_ciphers | サーバー側で設定した暗号化スイートリストを使用するか on/off |
ssl_session_cache | セッションキャッシュを設定する on/off |
ssl_session_timeout | セッションキャッシュの有効期限を設定する |
ssl_stapling | OCSP Staplingを設定する on/off |
ssl_stapling_verify | OSCPの問い合わせ結果の検証を設定する on/off |
resolver | 名前解決の際に利用するDNSサーバを指定する |
ssl_trusted_certificate | OCSPの問い合わせに利用するCA証明書を指定する。 |
暗号化スイートリストとは
暗号スイート
HTTPSには鍵認証(),鍵交換(),メッセージ認証符号(),共通鍵暗号化()といったものがあり、それぞれプロトコルの選択が可能です。これの組み合わせを暗号化スイートと呼びます。
以下コマンドで確認できます。
$ openssl ciphers -v
ECDHE-RSA-AES256-GCM-SHA384 TLSv1.2 Kx=ECDH Au=RSA Enc=AESGCM(256) Mac=AEAD
ECDHE-ECDSA-AES256-GCM-SHA384 TLSv1.2 Kx=ECDH Au=ECDSA Enc=AESGCM(256) Mac=AEAD
ECDHE-RSA-AES256-SHA384 TLSv1.2 Kx=ECDH Au=RSA Enc=AES(256) Mac=SHA384
ECDHE-ECDSA-AES256-SHA384 TLSv1.2 Kx=ECDH Au=ECDSA Enc=AES(256) Mac=SHA384
ECDHE-RSA-AES256-SHA SSLv3 Kx=ECDH Au=RSA Enc=AES(256) Mac=SHA1
ECDHE-ECDSA-AES256-SHA SSLv3 Kx=ECDH Au=ECDSA Enc=AES(256) Mac=SHA1
DH-DSS-AES256-GCM-SHA384 TLSv1.2 Kx=DH/DSS Au=DH Enc=AESGCM(256) Mac=AEAD
DHE-DSS-AES256-GCM-SHA384 TLSv1.2 Kx=DH Au=DSS Enc=AESGCM(256) Mac=AEAD
DH-RSA-AES256-GCM-SHA384 TLSv1.2 Kx=DH/RSA Au=DH Enc=AESGCM(256) Mac=AEAD
DHE-RSA-AES256-GCM-SHA384 TLSv1.2 Kx=DH Au=RSA Enc=AESGCM(256) Mac=AEAD
(略)
暗号化スイートリスト
優先度が高い順番で暗号化スイートを並べ、
OCSP Staplingとは
OCSP
HTTPS通信では、サーバー証明書の有効/失効を証明書失効リスト(CRL)を用いていました。しかし、失効リストの更新には即時性の点で問題があります。こちらの解決策としてOCSPではCRLでの有効性の確認の代わりにOCSPレスポンダに証明書の有効性を確認します。
OCSP Stapling
通常はクライアントがOCSPレスポンダに問い合わせをしますが、OCSP StaplingはOCSPレスポンダからの問い合わせ結果をサーバーにキャッシュすることで、クライアントはOCSPレスポンダへの問い合わせの必要がなくなり、より短時間で証明書の有効性を確認することができます。
おまけ
Nginxのconfigを自動生成できます。
https://nginxconfig.io/
参考
OCSP Stapling
理解してるつもりの SSL/TLS でも、もっと理解したら面白かった話
Let’s EncryptとNginx : セキュアなWebデプロイメントの現状
NginxでHTTPS:ゼロから始めてSSLの評価をA+にするまで Part 2 – 設定、Ciphersuite、パフォーマンス