nginx 本身不提供直接查看当前启用 tls 版本的命令,需结合配置检查(ssl_protocols 指令)、openssl/nginx 版本验证(nginx -v)、外部工具实测(openssl s_client、curl --tls)及日志记录($ssl_protocol)四步确认。

在 Nginx 中,Nginx 本身不直接提供命令行指令来“查看当前启用的 TLS 版本”,因为 TLS 版本是由 SSL/TLS 配置决定的,而不是运行时动态暴露的状态。要确认实际生效的 TLS 版本,需结合配置检查 + 外部验证两种方式。
1. 检查 Nginx 配置中的 ssl_protocols 指令
这是最直接的方式:TLS 版本由 ssl_protocols 指令显式控制。找到你站点的 server 块(通常在 /etc/nginx/sites-enabled/ 或 /etc/nginx/conf.d/ 下),查找该指令:
ssl_protocols TLSv1.2 TLSv1.3;
常见合法值包括:TLSv1.1、TLSv1.2、TLSv1.3(注意:OpenSSL 1.1.1+ 才支持 TLSv1.3,且 Nginx ≥ 1.13.0)。若未设置,Nginx 使用默认值(旧版本默认含 TLSv1,新版本通常为 TLSv1.2 TLSv1.3)。
确认后,别忘了重载配置以确保生效:
sudo nginx -t && sudo nginx -s reload
2. 验证 OpenSSL 和 Nginx 编译支持的 TLS 版本
Nginx 能启用哪些 TLS 版本,取决于它编译时链接的 OpenSSL(或 BoringSSL)版本:
- 运行
nginx -V 2>&1 | grep -o 'OpenSSL [0-9.]\+'查看绑定的 OpenSSL 版本 - 对照 OpenSSL 支持表:OpenSSL 1.0.1+ 支持 TLSv1.1/TLSv1.2;1.1.1+ 才支持 TLSv1.3
- 若显示
OpenSSL 1.0.2u,则无法启用 TLSv1.3,即使配置写了也无效
3. 使用外部工具实测连接支持的 TLS 版本
配置可能正确,但实际协商结果受客户端和中间设备影响。推荐用以下命令验证:
- 用
openssl s_client连接并指定协议(例如只试 TLSv1.2):
openssl s_client -connect example.com:443 -tls1_2
成功建立连接并显示证书信息,说明 TLSv1.2 可用;若报错 ssl handshake failure,可能被禁用。
- 用
curl指定 TLS 版本测试响应:
curl -I --tlsv1.2 https://example.com
curl -I --tlsv1.3 https://example.com
返回 HTTP 状态码(如 200)表示该版本可用;若提示 Received fatal alert: protocol_version,说明服务端未启用。
4. 启用 Nginx 日志记录 TLS 协商信息(可选进阶)
若需长期监控或调试,可在 server 块中添加日志变量:
log_format tlsinfo '$remote_addr - $remote_user [$time_local] '
'"$request" $status $body_bytes_sent '
'"$http_user_agent" "$ssl_protocol/$ssl_cipher"';然后在 access_log 中使用该格式。访问日志中将出现类似 TLSv1.3/ECDHE-ECDSA-AES256-GCM-SHA384 的字段,直观反映每次请求实际使用的 TLS 版本与加密套件。











