BETA

Nginx の SSL の設定はほぼデフォルトで大丈夫

投稿日:2018-11-04
最終更新:2018-11-04

Open SSL と Nginx のバージョンにもよるけど、たとえば Ubuntu 16.04 LTS だと、このへんだけやっておけば Qualys SSL Labs の評価 A を取れる。

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

なぜ?

Nginx 1.9.1 以降ではデフォルトの設定で脆弱性のあるプロトコルや暗号化スイートが無効になっている。

Configuring HTTPS servers - Nginx

v 1.9.1 以降の ssl_protocols の初期値はこう。

ssl_protocols TLSv1 TLSv1.1 TLSv1.2

SSL v2 や SSL v3 はデフォルトで無効になっている。あらためて ssl_protocols を指定しなくてよくなった。

ssl_ciphers は v1.0.5 からこうなってる。

ssl_ciphers HIGH:!aNULL:!MD5

!MD5 は MD5 を使う暗号化スイートを使わない、なので分かると思うけど、 HIGH!aNULL ってなんだろう?

OpenSSL の ciphers の説明 によれば、

HIGH
"High" encryption cipher suites. This currently means those with key lengths larger than 128 bits, and some cipher suites with 128-bit keys.

(中略)

aNULL
The cipher suites offering no authentication. This is currently the anonymous DH algorithms and anonymous ECDH algorithms. These cipher suites are vulnerable to "man in the middle" attacks and so their use is discouraged. These are excluded from the DEFAULT ciphers, but included in the ALL ciphers. Be careful when building cipherlists out of lower-level primitives such as kDHE or AES as these do overlap with the aNULL ciphers. When in doubt, include !aNULL in your cipherlist.

ざっくり説明するとそれぞれ「鍵長 128bit 以上の暗号化スイートを使うよ」「認証のない暗号スイート。使わないときは !aNull を指定してね」くらいのことが書いてある(ちゃんと知りたい人はちゃんと読んでください)。

ただし ssl_prefer_server_ciphers on; をちゃんと書いておかないとサーバ側の暗号化スイートの指定が優先されないので、これを書く必要はある。

Diffie-Hellman 鍵交換のパラメータを 2048bit で作って ssl_dhparam に設定しておけば、この時点で SSL Labs で評価 A が取れる。

あとは HSTS を有効化したりすれば A+ になるんじゃないかと。

技術ブログをはじめよう Qrunch(クランチ)は、プログラマの技術アプトプットに特化したブログサービスです
駆け出しエンジニアからエキスパートまで全ての方々のアウトプットを歓迎しております!
or 外部アカウントで 登録 / ログイン する
クランチについてもっと詳しく

この記事が掲載されているブログ

@aoitakuの技術ブログ

よく一緒に読まれる記事

0件のコメント

ブログ開設 or ログイン してコメントを送ってみよう
目次をみる
技術ブログをはじめよう Qrunch(クランチ)は、プログラマの技術アプトプットに特化したブログサービスです
or 外部アカウントではじめる
10秒で技術ブログが作れます!