Nginx 配置 HTTPS 后浏览器提示 ERR_SSL_VERSION 错误怎么解决

文章导读
这个错误通常是浏览器和服务器之间的 SSL/TLS 协议版本不匹配导致的,最直接的解决办法是在 Nginx 配置中明确启用 TLSv1.2 和 TLSv1.3,并禁用旧版协议。
📋 目录
  1. 前置检查:确认 Nginx 版本
  2. 配置修改方案
  3. 验证方法
  4. 常见坑与排查
  5. 参考来源
A A

这个错误通常是浏览器和服务器之间的 SSL/TLS 协议版本不匹配导致的,最直接的解决办法是在 Nginx 配置中明确启用 TLSv1.2 和 TLSv1.3,并禁用旧版协议。

先说结论:核心问题是加密协议版本过低或被禁用,现代浏览器已不再支持 TLS 1.1 及以下版本。

  • 先确认:执行 nginx -v 检查版本,TLSv1.3 需要 1.17.0+
  • 先处理:修改 Nginx 配置中的 ssl_protocols 和 ssl_ciphers 指令
  • 再验证:使用 openssl 命令或浏览器重新访问测试

前置检查:确认 Nginx 版本

在修改配置前,务必确认 Nginx 版本,因为 TLSv1.3 支持需要特定版本。

nginx -v

查看输出版本号:

  • 1.17.0 及以上:可以安全启用 TLSv1.3 和 TLSv1.2。
  • 1.17.0 以下:仅配置 TLSv1.2,强行添加 TLSv1.3 会导致 nginx -t 检查失败,服务无法启动。

配置修改方案

找到 Nginx 配置文件(通常位于 /etc/nginx/nginx.conf 或 /etc/nginx/conf.d/ 目录下),定位到对应的 server 块。

方案 A:Nginx 1.17.0+ (推荐)

Nginx 配置 HTTPS 后浏览器提示 ERR_SSL_VERSION 错误怎么解决
server {
    listen 443 ssl;
    server_name example.com;
    ssl_certificate /path/to/cert.pem;
    ssl_certificate_key /path/to/key.pem;
    
    # 启用 TLS 1.2 和 1.3
    ssl_protocols TLSv1.2 TLSv1.3;
    
    # Mozilla 中间级兼容加密套件
    ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
    ssl_prefer_server_ciphers off;
}

方案 B:Nginx 旧版本 (低于 1.17.0)

ssl_protocols TLSv1.2;
ssl_ciphers HIGH:!aNULL:!MD5;

修改后执行:

nginx -t
nginx -s reload

如果 nginx -t 报错 unknown protocol "TLSv1.3",说明版本过低,请移除 TLSv1.3 后重试。

验证方法

最简单的方法是直接在浏览器中刷新页面,看锁形图标是否正常显示,且不再报错。

命令行验证服务器支持的协议:

Nginx 配置 HTTPS 后浏览器提示 ERR_SSL_VERSION 错误怎么解决
openssl s_client -connect yourdomain.com:443 -tls1_2

如果连接成功并显示 Certificate 信息,说明 TLS 1.2 可用。对于 TLS 1.3:

openssl s_client -connect yourdomain.com:443 -tls1_3

常见坑与排查

1. 版本不匹配报错:低版本 Nginx 配置 TLSv1.3 会导致 reload 失败。务必先执行 nginx -v 确认。

2. 证书链不完整:有时候协议没问题,但中间证书缺失也会导致握手失败,表现类似。确保 ssl_certificate 文件中包含完整的证书链。

3. SNI 问题:如果服务器上有多个 HTTPS 站点,确保客户端支持 SNI,使用 openssl 测试时需加 -servername 参数。

4. 防火墙拦截:确认服务器安全组或防火墙放行了 443 端口,否则连接会被直接重置而不是报 SSL 错误。

参考来源

  • Nginx 官方文档 - ngx_http_ssl_module: https://nginx.org/en/docs/http/ngx_http_ssl_module.html
  • Mozilla SSL 配置生成器:https://ssl-config.mozilla.org/