最直接可靠的方式是用 openssl s_client 命令实测握手,它不依赖浏览器或中间工具,能真实反映 nginx 实际启用的协议和套件;需逐版本(tls 1.0–1.3)运行对应命令观察 new, tlsvx.y 和 cipher is 输出,再通过 nginx -t 提取 ssl_ciphers、openssl ciphers -v 展开套件列表,并用 -cipher 与 -tls1_2/-tls1_3 组合验证每个套件连通性。

最直接可靠的方式是用 openssl s_client 命令实测握手,它不依赖浏览器或中间工具,能真实反映 Nginx 实际启用的协议和套件。
逐版本测试 TLS 协议是否启用
在终端中运行以下命令,观察输出是否出现 New, TLSvX.Y 和 Cipher is 字样:
-
openssl s_client -connect example.com:443 -tls1→ 测试 TLS 1.0(应失败) -
openssl s_client -connect example.com:443 -tls1_1→ 测试 TLS 1.1(应失败) -
openssl s_client -connect example.com:443 -tls1_2→ 测试 TLS 1.2(应成功) -
openssl s_client -connect example.com:443 -tls1_3→ 测试 TLS 1.3(应成功)
若连接卡住、报 no protocol specified 或快速断开,说明该协议未被 Nginx 启用,或受限于 OpenSSL 编译版本(如 OpenSSL
确认当前生效的加密套件列表
先从配置中提取实际加载的套件字符串:
- 运行
nginx -T 2>/dev/null | grep ssl_ciphers获取 TLS 1.2 及以下的ssl_ciphers值 - 对 TLS 1.3,检查是否有
ssl_conf_command Ciphersuites行(如ssl_conf_command Ciphersuites "TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384") - 用
openssl ciphers -V '你的套件字符串'展开并排序,得到可逐个验证的套件名列表
注意:TLS 1.3 套件必须是 TLS_AES_128_GCM_SHA256 这类 RFC 8446 标准格式,不能混入 ECDHE-RSA-AES128-GCM-SHA256 等 TLS 1.2 风格名称。
用指定协议+套件组合实测连通性
对每个想验证的套件,搭配对应协议运行:
- TLS 1.2 套件:
openssl s_client -connect example.com:443 -cipher 'ECDHE-RSA-AES128-GCM-SHA256' -tls1_2 - TLS 1.3 套件:
openssl s_client -connect example.com:443 -cipher 'TLS_AES_128_GCM_SHA256' -tls1_3
成功时输出含 New, TLSv1.3 和 Cipher is TLS_AES_128_GCM_SHA256;失败则提示 no shared cipher 或无响应,说明服务端未启用该套件,或客户端 OpenSSL 版本不支持。
辅助验证:用 nmap 快速扫描支持项
作为补充手段,可用 nmap 的内置脚本快速获取概览:
- 安装后运行:
nmap --script ssl-enum-ciphers -p 443 example.com - 输出会列出各 TLS 版本下支持的完整套件列表,适合快速比对和安全审计
- 注意:nmap 结果是探测结果,不代表 Nginx 当前配置是否真正生效,仍需用
openssl s_client实测确认











