LoginSignup
22
14

More than 5 years have passed since last update.

Nginx で ssl_protocols や ssl_ciphers を省略するとどうなるのか?

Posted at

はじめに

僕は Nginx を使用した Web アプリケーションで SSL/TLS を使用する場合は、設定ファイルで ssl_protocolsssl_ciphers を明記しなくてはならないと思い込んでいました。そのため、いつも Mozilla SSL Configuration Generator からディレクティブをコピペしていました。しかし、これらのディレクティブを省略しても Qualys SSL LABS SSL Server Test で高スコアを出せることが分かりました。では省略した場合にはプロトコルや暗号スイートの指定はどうなるのか、調べてみました。

省略した場合の挙動

公式ドキュメント Nginx » Configuring HTTPS servers の冒頭に答えはありました。

The directives ssl_protocols and ssl_ciphers can be used to limit connections to include only the strong versions and ciphers of SSL/TLS. By default nginx uses "ssl_protocols TLSv1 TLSv1.1 TLSv1.2" and "ssl_ciphers HIGH:!aNULL:!MD5", so configuring them explicitly is generally not needed. Note that default values of these directives were changed several times.

以下は拙訳です。

ssl_protocols ディレクティブと ssl_ciphers ディレクティブの用途は、SSL/TLS のプロトコルと暗号スイートのうち強度の高いもののみを許可することで、接続を制限することです。デフォルト値はそれぞれ ssl_protocols TLSv1 TLSv1.1 TLSv1.2 と ssl_ciphers HIGH:!aNULL:!MD5 です。これらのディレクティブを明示的に指定する必要は基本的にありません。なお、これらのデフォルト値はこれまで何度か更新されています。

つまり ssl_protocolsssl_ciphers を指定せずとも、十分に安全性の高い設定となるようです。

ssl_ciphers ディレクティブのデフォルト値の意味

ちなみに ssl_ciphers HIGH:!aNULL:!MD5 はどういう意味なのでしょうか。これは OpenSSLWiki » Manual:Ciphers(1) に答えがありました。

cipher string 意味
HIGH 強度の高い暗号スイートを使用する。具体的には鍵長が 128 bit 以上のもの。
!aNULL 認証のない暗号スイート (ADH や AECDH を用いるもの) を 使用しない。中間者攻撃の脆弱性があるため。
!MD5 MD5 を用いる暗号スイートを 使用しないSLOTH 攻撃 の脆弱性が存在するため。

結論

  • SSL Server Test のスコアや分析結果に問題なければ、ssl_protocolsssl_ciphers を明示的に指定する必要は特にない。
    • ただし、これらのディレクティブのデフォルト値、あるいは実際にサーバ側で選択される暗号スイートは Nginx や OpenSSL のバージョンに依存するはずなので注意。
22
14
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
22
14