我正在嘗試找出如何停用 TLSv1 和 1.1 Nginx 並僅允許 1.2 上的連線。這是出於測試原因,而不是生產使用,而且我一生都無法弄清楚為什麼 Nginx 不允許我這樣做。
Nginx SSL 設定:
ssl on;
ssl_protocols TLSv1.2;
ssl_prefer_server_ciphers on;
ssl_ciphers ECDH+AESGCM256:DH+AESGCM256:ECDH+AES256:!aNULL:!MD5:!kEDH;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
add_header Strict-Transport-Security "max-age=262974383; includeSubdomains;";
add_header X-Frame-Options DENY;
add_header X-Content-Type-Options nosniff;
ssl_stapling on;
ssl_stapling_verify on;
resolver 8.8.8.8 8.8.4.4 valid=300s;
但由於某種原因,Nginx 仍然協商 1.0 和 1.1 連線。難道我做錯了什麼?我在 Ubuntu Server 14.04LTS 上使用 Nginx 1.7.10 和 OpenSSL 1.0.1f。
答案1
來自Nginx 文檔對於ssl_protocols
指令:
從版本 1.1.13 和 1.0.12 開始支援 TLSv1.1 和 TLSv1.2 參數,因此當在較舊的 nginx 版本上使用 OpenSSL 版本 1.0.1 或更高版本時,這些協定可以工作,但無法停用。
在較新的版本上,可以使用openssl
以下命令進行驗證:
- 驗證是否支援 TLS v1.2:
openssl s_client -tls1_2 -connect example.org:443 < /dev/null
- 驗證 TLS v1.1 是否為不是支持的:
openssl s_client -tls1_1 -connect example.org:443 < /dev/null
- 驗證 TLS v1.0 是否為不是支持的:
openssl s_client -tls1 -connect example.org:443 < /dev/null
如果 nginx 設定僅包含ssl_protocols TLSv1.2
指令,則僅支援 TLSv1.2。如果ssl_protocols TLSv1.1 and TLSv1.2
配置,則僅支援 TLSv1.1 和 TLSv1.2。使用openssl 1.0.1e
和進行測試nginx 1.6.2
。