如何修复常见 SSL 证书错误

当 SSL 证书出现问题时,浏览器会显示全屏红色警告页面 — 大多数访客会立即离开而不进入网站。SSL 问题因此直接影响您的信誉和流量。好消息是,每种错误类型都有明确的原因。本指南逐个介绍最常见的 SSL 问题,并提供修复方法和诊断工具。

ERR_SSL_PROTOCOL_ERROR

原因:浏览器无法与服务器完成 SSL 握手。

修复:

NET::ERR_CERT_DATE_INVALID(证书过期)

原因:SSL 证书已过期。

修复:

NET::ERR_CERT_COMMON_NAME_INVALID

原因:证书与所访问的域名不匹配。

修复:

SSL_ERROR_RX_RECORD_TOO_LONG

原因:服务器在端口 443 上发送 HTTP 响应而不是 HTTPS 响应。通常是 Apache 配置错误。

修复:检查您的 Apache Virtual Host 配置,确认 SSL 模块已启用且 VirtualHost 使用 SSL 指令在端口 443 上监听。

证书链不完整

SSL 可能在 Chrome 中工作,但在 Firefox 或移动设备上失败 — 这通常意味着缺少中间证书。

访问 ssllabs.com/ssltest 查看完整的证书链并识别缺失的中间证书。使用完整的证书链捆绑重新安装证书。

SSL 诊断工具

提示:遇到 SSL 错误时,首先在隐私/隐身窗口中打开网站。某些 SSL 错误是由浏览器中缓存的证书引起的,根本不是服务器端问题。

常见 SSL 证书错误一览

在深入研究每种情况之前,下表总结了浏览器显示的最常见 SSL 错误消息,以及它们的真实原因和简洁的修复方法。当您看到红色警告页面时,记下显示的准确错误文本(例如以 NET::ERR_CERT_ 开头的代码),然后首先在此表中查找。这样您可以快速确定正确的方向,而不是逐个尝试随机修复:

错误消息 原因 修复
NET::ERR_CERT_DATE_INVALID 证书过期,或访客的设备时钟设置不正确 更新证书并启用自动续期;如果仅一台设备受到影响,修复该设备的日期/时间
NET::ERR_CERT_COMMON_NAME_INVALID 证书中的域名与打开的域名不匹配(名称不匹配) 颁发涵盖根域和 www 的证书;验证 SAN 与实时域名匹配
NET::ERR_CERT_AUTHORITY_INVALID 证书链不完整(缺少中间证书)或自签名证书 使用完整的 CA 捆绑重新安装;对于内部测试,使用来自真实 CA 的证书
ERR_SSL_PROTOCOL_ERROR 握手失败,例如 TLS 版本不匹配或 Cloudflare SSL 模式错误 在服务器上启用 TLS 1.2/1.3;将 Cloudflare SSL 设置为完全(严格)
SSL_ERROR_RX_RECORD_TOO_LONG 服务器在端口 443 上发送 HTTP 而不是 HTTPS 检查 Virtual Host:启用 SSL 模块并在端口 443 上使用完整 SSL 指令监听
证书链不完整(仅在某些浏览器中警告) 缺少中间证书;某些浏览器无法自行构建证书链 安装完整的 CA 捆绑;在 SSL 实验室重新验证链是否完整
混合内容(无挂锁/叉形挂锁) HTTPS 页面加载资源(图像、JS、CSS)通过 HTTP 将所有资源切换到 HTTPS 或相对 URL;使用 whynopadlock.com 检测

如果遇到此表中没有的错误,复制全文搜索,因为每个浏览器对同一根本原因的错误命名不同。例如,Firefox 在同一情况下使用 SEC_ERROR_UNKNOWN_ISSUER,而 Chrome 显示 NET::ERR_CERT_AUTHORITY_INVALID — 两者都表示证书链不完整。

使用工具检查 SSL(openssl s_client、SSL 实验室、浏览器)

准确的 SSL 诊断从实际"看到"服务器发送的内容开始,而不是仅从错误文本推测。下面三组工具涵盖几乎所有情况,从命令行到可视化报告:

1. openssl s_client — 从您的计算机直接检查

openssl s_client 命令连接到服务器并打印它接收的完整链。这是检查中间证书是否存在的理想工具,无需依赖任何外部网站:

openssl s_client -connect yourdomain.com:443 -servername yourdomain.com

查看 Certificate chain 部分。如果它仅显示您的域名叶证书(深度 0),但没有中间证书(深度 1),则证书链不完整。还要查看 Verify return code 行 — 0 (ok) 表示良好。要检查过期日期,请使用:

echo | openssl s_client -connect yourdomain.com:443 2>/dev/null | openssl x509 -noout -dates

2. SSL 实验室 — 可视化评级报告

打开 ssllabs.com/ssltest 并输入您的域名。它会分配从 A 到 F 的评级,并清楚地说明证书链是否完整、支持哪些 TLS 版本以及是否存在任何已知漏洞。这是修复后确认结果的理想选择,也是与客户或团队分享的证据。

3. 浏览器开发者工具

按 F12 打开开发者工具,进入"安全"标签页(Chrome)查看证书状态和不安全资源列表。"控制台"标签页会报告每个混合内容项及其 HTTP URL,以便您精确修复。

修复不完整的证书链(中间证书/CA 捆绑)

不完整的证书链是"网站在 Chrome 中工作但在移动设备或 Firefox 上失败"的主要原因之一,因为某些桌面浏览器支持 AIA 获取以自动获取中间证书,而移动设备和大多数服务器端 API 库不支持 — 因此它们将证书视为不受信任。正确的修复方法是让服务器首先发送完整的证书链。

完整的证书链必须按顺序排列:从域名的叶证书开始,然后是 CA 的中间证书;您不需要包含根证书(它已存在于用户的信任存储中)。修复步骤:

对于 Let's Encrypt,发行工具(例如 certbot)会创建一个 fullchain.pem,已经结合了叶证书和中间证书。始终将您的网络服务器指向 fullchain.pem 而不是 cert.pem 以避免证书链损坏。

www/非 www 和子域的 SSL 问题

许多网站仅为 yourdomain.com 颁发证书,但忘记了某些访客输入 www.yourdomain.com,导致仅在 www 版本(或反之)上出现名称不匹配。大多数领先提供商的 DV 证书会自动包含两个名称(根域和 www),但您应该在 SAN(使用者备用名称)字段中确认两者都存在。

shop.yourdomain.com 或 mail.yourdomain.com 等其他子域 不会自动被根证书覆盖。您的选项:

在重定向级别,以一致的方向指向 www ↔ 非 www(选择一个作为规范),并通过 .htaccess 强制 HTTPS,以便访客不会在证书不覆盖的版本上受阻。

常见问题解答

SSL 在桌面上工作,但在手机上失败 — 为什么?

通常是缺少中间证书。某些浏览器会自动填充证书链,而其他浏览器不会 — 使用完整的证书链捆绑重新安装证书。

我修复了服务器,但仍然看到相同的错误

在隐身窗口中打开网站 — 某些错误来自您设备上缓存的旧证书,而不是服务器端问题。

我应该使用哪些工具检查 SSL?

ssllabs.com/ssltest 最详细地检查证书链和协议,而 whynopadlock.com 有助于查找混合内容,openssl s_client 命令从您的计算机直接检查证书链,无需任何外部网站。

通配符证书也覆盖根域吗?

否 — 通配符 *.yourdomain.com 仅覆盖单级子域,不覆盖主域 yourdomain.com。大多数签发者会为您将根域添加到 SAN 中,但在上线前请确认。

需要可靠的 SSL 证书?

AsiaGB SSL 证书来自领先的 CA — RapidSSL、GeoTrust、DigiCert — 并包括终身保修和支持。

查看 SSL 证书