如何修复”此网站无法提供安全连接”错误
**”此网站无法提供安全连接”**错误意味着您的浏览器未能与目标服务器完成 TLS 握手。连接尝试在任何加密通道建立之前就已终止,导致浏览器无法验证服务器身份或协商密码套件。
此错误出现在 Chrome、Firefox、Edge 和 Safari 中,几乎总是伴随着特定的错误代码——最常见的是 ERR_SSL_PROTOCOL_ERROR、ERR_SSL_VERSION_OR_CIPHER_MISMATCH 或 SSL_ERROR_HANDSHAKE_FAILURE_ALERT。每个代码指向不同的故障层:服务器的证书配置、客户端的 TLS 堆栈,或两者之间的网络路径。在修改任何设置之前,先确定哪一层出现了问题,将为您节省大量时间。
TLS 握手期间实际发生了什么
在深入了解修复方法之前,理解故障机制非常重要。当您的浏览器连接到 HTTPS 网站时,它会在毫秒内执行 TLS 握手:
- 浏览器发送
ClientHello消息,通告支持的 TLS 版本和密码套件。 - 服务器以
ServerHello响应,选择协议版本和密码,然后提供其证书链。 - 浏览器根据受信任的根证书颁发机构 (CA) 验证证书,检查到期日期,验证域名是否与主题备用名称 (SAN) 匹配,并确认证书未被吊销(通过 OCSP 或 CRL)。
- 双方派生会话密钥并开始加密通信。
在这四个步骤中的任何一步失败都会产生”无法提供安全连接”的消息。浏览器详细信息窗格中的错误代码会准确告诉您哪个步骤出现了问题。
错误代码对应的根本原因
| 错误代码 | 主要原因 | 需要修复的一方 |
|---|
| — | — | — |
|---|
| `ERR_SSL_PROTOCOL_ERROR` | 服务器发送了格式错误或空的 TLS 响应 | 服务器管理员 |
|---|
| `ERR_SSL_VERSION_OR_CIPHER_MISMATCH` | 客户端与服务器之间没有共享的 TLS 版本或密码 | 双方 |
|---|
| `ERR_CERT_DATE_INVALID` | 证书已过期或系统时钟错误 | 服务器管理员或最终用户 |
|---|
| `ERR_CERT_AUTHORITY_INVALID` | 证书由不受信任或自签名的 CA 颁发 | 服务器管理员 |
|---|
| `ERR_CERT_COMMON_NAME_INVALID` | 证书域名与 URL 不匹配 | 服务器管理员 |
|---|
| `SSL_ERROR_HANDSHAKE_FAILURE_ALERT` | Firefox 特有;通常是服务器强制使用 TLS 1.0/1.1 | 服务器管理员 |
|---|
| `ERR_SSL_OBSOLETE_VERSION` | 服务器仅支持已弃用的 TLS 1.0 或 1.1 | 服务器管理员 |
|---|
如果错误代码将责任归于服务器管理员,而您不控制该服务器,则您的选择仅限于联系网站所有者。以下部分重点介绍您可以在客户端解决的错误,以及针对管理员的服务器端修复方法。
客户端修复方法
1. 在更改任何设置之前验证证书
点击地址栏中的锁形图标(或警告图标),然后选择连接安全 > 证书有效。检查:
- 有效期:“Not After”日期必须在未来。
- 颁发给:证书 SAN 字段中的域名必须与 URL 完全匹配,包括子域名。
- 颁发者:CA 链必须终止于您的操作系统信任的根 CA。
如果证书已过期或不匹配,且您不拥有该服务器,请停止操作并联系网站所有者。如果您管理该服务器,请跳至下面的服务器端部分。
2. 同步系统日期和时间
证书验证对时间敏感。系统时钟即使偏差几分钟,也可能导致浏览器认为有效证书已过期,或者尚未生效的证书被提前使用。
Windows:
w32tm /resync /force或者,右键单击系统时钟,选择调整日期/时间,并使用 Windows 时间服务启用自动设置时间。
Linux (systemd):
timedatectl set-ntp true
timedatectl statusmacOS:打开系统设置 > 通用 > 日期与时间,并启用自动设置时间和日期。
同步后,重启浏览器并重新测试。
3. 清除浏览器的 SSL 状态和缓存
浏览器会缓存证书验证结果和 HSTS(HTTP 严格传输安全)策略。即使服务器端证书问题已解决,过时的缓存条目也可能阻止访问。
Chrome — 清除浏览数据:
导航至 chrome://settings/clearBrowserData,选择所有时间,勾选Cookie 及其他网站数据和缓存的图片和文件,然后点击清除数据。
Chrome — 清除特定域名的 HSTS 条目:
导航至 chrome://net-internals/#hsts,在删除域安全策略下输入域名,然后点击删除。当某个域名之前仅支持 HTTPS 而现在配置错误时,此方法特别有用。
Windows — 清除操作系统级别的 SSL 状态:
Control Panel > Network and Internet > Internet Options > Content tab > Clear SSL State这将清除 Internet Explorer、Edge(旧版)和某些 Windows 应用程序使用的证书缓存。
Firefox:导航至 about:preferences#privacy,滚动到 Cookie 和网站数据,然后点击清除数据。
4. 禁用杀毒软件的 HTTPS 检测
来自 Avast、AVG、Kaspersky、ESET 和 Bitdefender 等供应商的安全产品会执行 SSL/TLS 拦截——它们充当本地中间人代理,使用自己的根 CA 重新签署证书。当其根 CA 未正确安装在浏览器的信任存储中,或拦截模块存在错误时,所有 HTTPS 连接都会失败。
要测试这是否是原因:
- 在杀毒软件设置中临时禁用 Web 防护、HTTPS 扫描或 SSL 过滤功能。
- 重新加载失败的页面。
- 如果错误消失,则杀毒软件是罪魁祸首。
永久修复方法是将受影响的域名添加到杀毒软件的排除列表中,而不是全局禁用 HTTPS 扫描,因为那样会降低您的安全性。
5. 更新浏览器
现代 TLS 要求浏览器至少支持 TLS 1.2,TLS 1.3 则提供最佳安全性。早于 Chrome 70、Firefox 63 或 Edge 79 的浏览器可能缺乏 TLS 1.3 支持或存在已知的握手错误。
Chrome:
导航至 chrome://settings/help。Chrome 会自动检查更新并在重启时安装。
Firefox:
导航至 about:support,然后在帮助菜单下点击检查更新。
保持浏览器最新还能确保浏览器内置的根 CA 存储是最新的,这对于由较新 CA 颁发的证书非常重要。
6. 审查浏览器中的 TLS 协议设置
Chrome 和 Edge(基于 Chromium):
自 Chrome 84 起,这些浏览器不再在界面中提供 TLS 版本切换。TLS 1.0 和 1.1 已被永久禁用。如果某个网站需要 TLS 1.0 或 1.1,则该网站必须更新——没有客户端解决方案,也不应该有。
要检查实验性 TLS 标志,请导航至 chrome://flags 并搜索 TLS。在大多数生产版本中,不会出现可操作的标志。
Firefox:
导航至 about:config 并搜索 security.tls.version.min。该值应为 3(对应 TLS 1.2)。将其设置为 1 或 2 以适应有问题的服务器存在安全风险,仅应在隔离的测试环境中进行。
Internet Explorer / 旧版 Edge:
导航至Internet 选项 > 高级 > 安全,确保勾选使用 TLS 1.2和使用 TLS 1.3。取消勾选使用 SSL 3.0、使用 TLS 1.0和使用 TLS 1.1。
7. 禁用或审查浏览器扩展
具有网络访问权限的扩展——特别是 VPN、广告拦截器、隐私工具和代理切换器——可能会拦截或修改 TLS 连接。要隔离扩展冲突:
导航至 chrome://extensions/ 并禁用所有扩展。重新加载失败的页面。如果错误解决,逐一重新启用扩展,每次重新加载后检查,直到找到有问题的扩展。
8. 更改 DNS 解析器
DNS 不直接影响 TLS,但返回错误 IP 地址的 DNS 解析器(由于中毒、过滤或 ISP 干扰)可能会将您的浏览器定向到提供错误域名证书的服务器,从而导致 ERR_CERT_COMMON_NAME_INVALID 错误。
切换到公共解析器可消除 ISP 级别的 DNS 操纵:
Windows — 通过 PowerShell 更改 DNS:
Set-DnsClientServerAddress -InterfaceAlias "Ethernet" -ServerAddresses ("1.1.1.1","1.0.0.1")将 "Ethernet" 替换为您实际的接口名称(使用 Get-NetAdapter 列出接口)。
Linux:
sudo nano /etc/resolv.conf添加:
nameserver 1.1.1.1
nameserver 8.8.8.8推荐的公共解析器:
| 提供商 | 主要 DNS | 次要 DNS | 备注 |
|---|
| — | — | — | — |
|---|
| Cloudflare | `1.1.1.1` | `1.0.0.1` | 全球平均延迟最低 |
|---|
| `8.8.8.8` | `8.8.4.4` | 可靠,广泛支持 |
|---|
| Quad9 | `9.9.9.9` | `149.112.112.112` | 内置恶意软件拦截 |
|---|
9. 重置网络堆栈(Windows)
损坏的 Winsock 目录或 TCP/IP 堆栈可能导致间歇性 TLS 故障,这些故障看似与证书无关。以管理员身份运行以下命令:
netsh int ip reset
netsh winsock reset
ipconfig /release
ipconfig /renew
ipconfig /flushdns运行所有五个命令后重启计算机。不要跳过重启——netsh winsock reset 尤其需要重启才能生效。
管理员的服务器端修复方法
如果您管理提供证书的 Web 服务器,以下是最常见的服务器端原因及其修复方法。
过期或配置错误的 SSL 证书
过期证书是服务器端此错误最常见的原因。如果您在 VPS 托管环境中运行网站,证书续期应该是自动化的。
从命令行检查证书到期时间:
echo | openssl s_client -connect yourdomain.com:443 -servername yourdomain.com 2>/dev/null | openssl x509 -noout -dates使用 Certbot(Let’s Encrypt)自动续期:
sudo certbot renew --dry-run添加 cron 任务或 systemd 定时器,每天运行两次 certbot renew——Let’s Encrypt 证书每 90 天过期一次,Certbot 仅在剩余不足 30 天时才续期。
0 0,12 * * * root certbot renew --quiet如果您需要具有扩展验证或通配符覆盖的商业验证证书,来自受信任 CA 的 SSL 证书可为所有主流浏览器提供所需的信任链。
不完整的证书链
一种非常常见的配置错误:服务器仅提供终端实体证书,而不包含中间 CA 证书。浏览器无法建立到其识别的根 CA 的信任路径,从而导致 ERR_CERT_AUTHORITY_INVALID。
使用 SSL Labs 诊断:
通过 SSL Labs 服务器测试(外部工具)运行您的域名。链问题将立即被标记出来。
在 Nginx 上修复:
ssl_certificate 指令必须指向包含完整链的文件——您的证书后跟所有中间证书:
cat your_domain.crt intermediate.crt > fullchain.crtssl_certificate /etc/nginx/ssl/fullchain.crt;
ssl_certificate_key /etc/nginx/ssl/your_domain.key;在 Apache 上修复:
SSLCertificateFile /etc/apache2/ssl/your_domain.crt
SSLCertificateKeyFile /etc/apache2/ssl/your_domain.key
SSLCertificateChainFile /etc/apache2/ssl/intermediate.crt已弃用的 TLS 版本和弱密码套件
浏览器已移除对 TLS 1.0 和 TLS 1.1 的支持。如果您的服务器仅提供这些协议版本,现代浏览器将完全拒绝连接。
推荐的 Nginx TLS 配置:
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:DHE-RSA-AES128-GCM-SHA256;
ssl_prefer_server_ciphers off;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 1d;
ssl_stapling on;
ssl_stapling_verify on;推荐的 Apache TLS 配置:
SSLProtocol all -SSLv3 -TLSv1 -TLSv1.1
SSLCipherSuite ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384
SSLHonorCipherOrder off
SSLSessionTickets off修改服务器配置后,使用以下命令测试:
openssl s_client -connect yourdomain.com:443 -tls1_2
openssl s_client -connect yourdomain.com:443 -tls1_3证书域名不匹配
如果您的证书涵盖 www.example.com,但用户访问的是 example.com(或反之),浏览器将报告域名不匹配。正确的修复方法是颁发一个在 SAN 字段中包含两个名称的证书,或使用通配符证书(*.example.com)。
在独立服务器环境中设置新域名时,在上线之前务必验证 SAN 字段涵盖服务器将响应的每个主机名变体。
混合内容拦截
通过 HTTPS 加载的页面引用 HTTP 资源(图片、脚本、样式表)会触发混合内容警告。虽然这不会直接产生”无法提供安全连接”错误,但可能导致页面部分失败,被误诊为 TLS 错误。
使用以下方法审查混合内容:
curl -s https://yourdomain.com | grep -Eo 'src="http://[^"]*"|href="http://[^"]*"'客户端与服务器端原因比较
| 症状 | 可能原因 | 责任方 |
|---|
| — | — | — |
|---|
| 所有 HTTPS 网站均出现错误 | 系统时钟错误、杀毒软件拦截、浏览器过时 | 最终用户 |
|---|
| 仅特定网站出现错误 | 证书过期、链不完整、域名不匹配 | 服务器管理员 |
|---|
| 服务器迁移后出现错误 | 证书未转移、虚拟主机配置错误 | 服务器管理员 |
|---|
| 仅在企业网络中出现错误 | 防火墙或代理执行 TLS 检测 | 网络管理员 |
|---|
| 安装杀毒软件后出现错误 | 已启用 HTTPS 扫描 / SSL 拦截 | 最终用户 / IT 管理员 |
|---|
| 旧版 Windows 上出现错误 | 根 CA 存储过时,操作系统中 TLS 1.2 已禁用 | 最终用户 / IT 管理员 |
|---|
托管环境注意事项
您运行的托管环境直接影响您解决服务器端 TLS 问题的难易程度。
在共享虚拟主机上,证书管理通常通过控制面板处理。大多数现代共享托管平台包含免费的 Let’s Encrypt 集成,但您对服务器范围的 TLS 协议设置控制有限。
在带 cPanel 的 VPS 上,您可以访问 AutoSSL 进行自动证书配置,并可以直接配置 Apache 或 Nginx TLS 设置。对于 TLS 配置精度要求较高的网站,这是推荐的环境。
在裸机独立服务器上,您对整个 TLS 堆栈拥有完全控制权——OpenSSL 版本、密码套件选择、OCSP 装订、HSTS 预加载和证书固定——但您也完全负责保持配置的最新状态。
实用决策清单
使用此清单系统地分类错误,而不是随机应用修复方法:
- 错误是出现在所有 HTTPS 网站还是仅一个?
- 所有网站:重点检查系统时钟、杀毒软件 HTTPS 扫描、浏览器更新、操作系统根 CA 存储。
- 一个网站:问题几乎肯定是服务器端的。
- 特定错误代码显示什么?
ERR_CERT_DATE_INVALID:首先检查系统时钟,然后检查证书到期。ERR_CERT_AUTHORITY_INVALID:检查证书链的完整性。ERR_SSL_VERSION_OR_CIPHER_MISMATCH:服务器运行已弃用的 TLS 或不支持的密码。ERR_CERT_COMMON_NAME_INVALID:证书 SAN 与域名不匹配。
- 在不同网络上错误是否消失?
- 是:防火墙、代理或 ISP 级别的 TLS 检测是原因。
- 禁用杀毒软件后错误是否消失?
- 是:在杀毒软件 HTTPS 扫描设置中为该域名配置排除项。
- 您是服务器管理员吗?
- 在修改任何配置文件之前,先运行
openssl s_client诊断和 SSL Labs 测试。 - 解决即时问题后立即自动化证书续期。
常见问题
为什么”此网站无法提供安全连接”仅出现在一个网站上?
当错误仅限于单个域名时,根本原因几乎总是服务器端的:证书过期、证书链不完整、证书 SAN 字段中的域名不匹配,或服务器配置为仅使用现代浏览器不再接受的已弃用 TLS 版本(1.0 或 1.1)。
VPN 会导致此错误吗?
是的。某些 VPN 客户端通过自己的解析器路由 DNS 查询,或执行干扰 TLS 握手的流量检测。如果错误仅在 VPN 激活时出现,请禁用 VPN 的”分割隧道”或”SSL 检测”功能,或将受影响的域名添加为排除项。
清除缓存总能修复 SSL 错误吗?
不能。清除缓存可解决由过时的 HSTS 策略或缓存的无效证书响应引起的错误。它对服务器端证书问题、系统时钟问题或杀毒软件拦截没有任何影响。将清除缓存作为第一步,而不是万能解决方案。
如何在不使用浏览器的情况下检查服务器的 SSL 证书是否配置正确?
在任何具有网络访问权限的机器上使用 OpenSSL:
openssl s_client -connect yourdomain.com:443 -servername yourdomain.com输出显示完整的证书链、协商的 TLS 版本、选择的密码套件以及任何验证错误。这是诊断服务器端 TLS 问题最可靠的方法。
ERR_SSL_PROTOCOL_ERROR 和 ERR_SSL_VERSION_OR_CIPHER_MISMATCH 有什么区别?
ERR_SSL_PROTOCOL_ERROR 表示服务器发送的响应不符合任何已识别的 TLS 记录格式——通常由服务器在 443 端口发送 HTTP 响应、负载均衡器配置错误或防火墙在握手中途终止连接引起。ERR_SSL_VERSION_OR_CIPHER_MISMATCH 意味着握手正确开始,但客户端和服务器无法就相互支持的 TLS 版本或密码套件达成一致,通常是因为服务器仅支持已弃用的协议。
