私のサイトのリバースプロキシとして機能するNGINXを使用しており、非常によく機能しています。 SSLを必要とするサイトでは、SSLLabsスコアができるだけ高くなるように raymii.org に従いました。サイトの1つはPCI DSSに準拠している必要がありますが、TLS 1.0が有効になっているため、最新のTrustWaveスキャンに基づいて失敗しています。
Nginx.confのhttpレベルでは、次のようになっています。
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
私が持っている特定のサーバーについて:
ssl_protocols TLSv1.1 TLSv1.2;
暗号を変更し、httpレベルから各sslサイトサーバーに移動しましたが、実行するタイミングに関係ありません。
openssl s_client -connect www.example.com:443 -tls1
TLS 1.0の有効な接続を取得します。 SSLLabsは、サイトのnginxセットアップを[〜#〜] a [〜#〜]として配置しますが、TLS 1.0を使用しているため、残りのセットアップは正しいですが、TLS 1.0をオフにしないだけです。
何が欠けている可能性があるのか?
openssl version -a
OpenSSL 1.0.1f 6 Jan 2014
built on: Thu Jun 11 15:28:12 UTC 2015
platform: debian-AMD64
nginx -v
nginx version: nginx/1.8.0
ここでの問題は、Server name indication
TLSネゴシエーションの一部は、接続自体がネゴシエートされた後に行われます。また、プロトコルは接続ネゴシエーション中にネゴシエートされます。
他の仮想ホストが関連付けられていないサーバー上のIPアドレスにその仮想ホストを構成すると、その仮想ホストにTLS v1.0を適用しないことが可能になる場合があります。したがって、nginxはIPアドレスに基づいて、TLS v 1.0が許可されていないことを認識します。
「デフォルト」のSSLネゴシエーションテンプレートとして使用するサーバーブロックを見つけてください。リッスンラインを見つける
server {
...
listen 443 ssl;
ssl_protocols TLSv1.1 TLSv1.2;
...
}
行の終わりにdefault_server
を追加します
server {
...
listen 443 ssl default_server;
ssl_protocols TLSv1.1 TLSv1.2;
...
}
これにより、nginxは、使用するTLSバージョンをネゴシエートするときに構成を持つことができます。欠点は、ポートごとに1つのデフォルトサーバーしか使用できないことです。そのため、TLSv1が有効になっている仮想ドメインと無効になっている仮想ドメインを用意することはできません。
Nginxバージョン1.8.1でTLSv1を無効にしました。 opensslを1.0.1gまたは1.0.1hバージョンに更新する必要があります。次に、ssl_protocolsディレクティブから「TLSv1」を削除します。
ssl_protocols TLSv1.1 TLSv1.2
次に、コマンドでTLSv1経由の接続を確認します。
openssl s_client -tls1 -connect example.com:443 < /dev/null
あなたはそのようなものを得るはずです:
CONNECTED(00000003)
write:errno=104
---
no peer certificate available
---
No client certificate CA names sent
---
SSL handshake has read 0 bytes and written 0 bytes
---
New, (NONE), Cipher is (NONE)
Secure Renegotiation IS NOT supported
Compression: NONE
Expansion: NONE
No ALPN negotiated
SSL-Session:
Protocol : TLSv1
Cipher : 0000
Session-ID:
Session-ID-ctx:
Master-Key:
Key-Arg : None
Krb5 Principal: None
PSK identity: None
PSK identity hint: None
Start Time: 1474531027
Timeout : 7200 (sec)
Verify return code: 0 (ok)
---