浏览器
ERR_SSL_VERSION_OR_CIPHER_MISMATCH 原因和服务器修法
ERR_SSL_VERSION_OR_CIPHER_MISMATCHERR_SSL_VERSION_OR_CIPHER_MISMATCH 的意思是:浏览器和服务器之间没有任何一个共同支持的 TLS 版本或加密套件,所以建立不了安全连接。 几乎都是服务器或 CDN 的配置问题:TLS 设置太旧,或者没有你访问的这个域名的证书。
先判断是网站的问题还是你电脑的问题
外部检测只看到 TLS 1.0/1.1、弱套件或缺证书,是网站的问题;外部检测显示 TLS 1.2/1.3 正常,就查本地。用 SSL 检测 从外部看服务器支持哪些协议:
curl ssl.sh/example.com
- 检测显示只有 TLS 1.0/1.1、只有弱套件,或者没有这个域名的证书:网站要修,访客这边没有安全的绕过办法。
- 检测显示 TLS 1.2/1.3 正常:查本地。浏览器太旧、Windows 组策略禁用了 TLS 1.2、杀毒软件 HTTPS 扫描、公司代理,都可能导致协商失败。
原因
这个错误有 5 种原因,最常见的是服务器只支持 TLS 1.0 或 1.1。
1. 服务器只支持 TLS 1.0 或 1.1
常见于老旧网络设备、Windows Server 2008 上的老 IIS 和多年没动过的手写配置。确认方法:
openssl s_client -connect example.com:443 -servername example.com -tls1_2 </dev/null
openssl s_client -connect example.com:443 -servername example.com -tls1_3 </dev/null
两个都失败就要开启 TLS 1.2 和 1.3。另见 NET::ERR_SSL_OBSOLETE_VERSION。
2. CDN 或主机上没有这个域名的证书
CDN 节点收到一个它没有证书的 SNI 域名时,可能直接终止握手,Chrome 就报这个错。常见于刚加的子域名,或者通配符覆盖不到的二级子域名。在阿里云/腾讯云 CDN 控制台给这个加速域名单独配置 HTTPS 证书。
3. 只开了过时的加密套件
服务器只提供 RC4、3DES 或出口级套件,现代浏览器一个都不支持。用 加密套件查询 查具体套件,换成新的套件列表。
4. 证书类型和套件对不上
用的是 ECDSA 证书,却只开了 ECDHE-RSA-* 套件(或者反过来),就没有可用的组合。两类都加上,或者直接用新版 OpenSSL 的默认值。
5. 客户端限制了 TLS
Windows 组策略或注册表禁用了 TLS 1.2、浏览器太老、安全软件干扰,都会导致协商失败。升级浏览器,按微软文档检查 TLS 注册表设置。国内一些老版本的“双核浏览器”在兼容模式下用的是系统 IE 内核,也会受 Windows TLS 设置影响。
在各浏览器/系统上的样子
Chrome 内核的浏览器显示 ERR_SSL_VERSION_OR_CIPHER_MISMATCH,Firefox 按具体原因显示 SSL_ERROR_NO_CYPHER_OVERLAP 或 SSL_ERROR_UNSUPPORTED_VERSION。
| 浏览器 | 显示内容 |
|---|---|
| Chrome / Edge / 360 极速模式 / QQ 浏览器 | “此网站无法提供安全连接”“example.com 使用了不受支持的协议。”ERR_SSL_VERSION_OR_CIPHER_MISMATCH |
| Firefox | SSL_ERROR_NO_CYPHER_OVERLAP 或 SSL_ERROR_UNSUPPORTED_VERSION |
| Safari | Safari 无法建立安全连接 |
| curl | tlsv1 alert protocol version 或 sslv3 alert handshake failure |
站长怎么修
修法是在服务器、CDN 和负载均衡上开启 TLS 1.2、TLS 1.3 和现代套件,并给每个域名绑定证书。
1. 开启 TLS 1.2、1.3 和现代套件。 Nginx:
ssl_protocols TLSv1.2 TLSv1.3;
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;
ssl_prefer_server_ciphers off;
宝塔面板在“网站 → 设置 → SSL”里可以勾选 TLS 版本,取消 TLSv1 和 TLSv1.1。阿里云/腾讯云 CDN 和负载均衡在 HTTPS 配置里选择 TLS 安全策略,挑只含 TLS 1.2 及以上的策略。TLS 配置生成器 能输出 Apache、HAProxy 等的等效配置。
2. Windows Server 按微软 TLS 注册表文档,在 HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols 下启用 TLS 1.2 后重启。Windows Server 2012 R2 及以后默认就支持 TLS 1.2。
3. 每个域名都要有证书。 CDN、负载均衡上的每个域名都要绑定证书。
4. 复测。 curl ssl.sh/example.com 应当显示支持 TLS 1.2 和 1.3,并且证书有效。
常见问题
能在 Chrome 里重新打开 TLS 1.0,去访问老设备吗?
新版 Chrome 已经没有这个选项了。如果是你自己的老打印机、交换机、路由器,在可信的内网里用它的 HTTP 管理地址,或者升级固件。不要为了访问互联网上的网站去降低浏览器安全设置。
网站用了 CDN,加了个子域名之后就报这个错,为什么?
CDN 上很可能没有这个域名的证书,握手无法继续,浏览器就报版本或套件不匹配。给新域名签发或上传证书,注意 a.b.example.com 这种二级子域名不在 *.example.com 的覆盖范围内。
这个错误是不是说明网站被黑了?
不是。这是兼容性问题,不代表被入侵:要么网站的 TLS 设置太老,要么缺这个域名的证书。