15%

全场主机优惠15%

测试技能,享折扣

使用代码:

Skills
开始使用
30.10.2024

SSL 安全错误:诊断和修复完整指南

SSL/TLS 错误是网站可能面临的最具破坏性的问题之一。单个证书警告就足以让访问者逃离——这是有原因的。这些浏览器警报表明用户和服务器之间的加密连接无法验证,使敏感数据面临风险。无论您是遇到令人沮丧的警告页面的普通互联网用户,还是看着跳出率飙升的网站所有者,了解 SSL 安全错误都是必不可少的。

本综合指南涵盖了每种主要 SSL 错误类型、其根本原因以及修复所需的确切步骤——从用户和服务器管理员的角度。

什么是 SSL/TLS,为什么它很重要?

SSL(安全套接字层)及其现代继任者 TLS(传输层安全)是加密网络浏览器和网络服务器之间传输的数据的密码协议。当网站使用 HTTPS 时,意味着已部署 SSL/TLS 证书,对服务器身份进行身份验证并保护传输中的数据。

当证书出现问题时——它过期、配置错误或浏览器无法验证它——连接被标记为不安全。Chrome、Firefox、Edge 和 Safari 等浏览器会显示突出的警告页面,以保护用户免受潜在的中间人攻击或欺诈网站的侵害。

对于网站所有者来说,这些错误不仅会损害用户信任——它们会损害 SEO 排名、降低转化率,并可能表明需要立即关注的更深层基础设施问题。

最常见的 SSL 安全错误解释

1. NET::ERR_CERT_COMMON_NAME_INVALID

它的含义:SSL 证书的通用名称 (CN) 或主题备用名称 (SAN) 中列出的域名与浏览器尝试访问的域名不匹配。

常见原因:

  • www.example.com 颁发的证书,但通过 example.com 访问网站(反之亦然)
  • 不覆盖根域的通配符证书(*.example.com
  • 来自不同域的证书意外应用于服务器
  • Apache 或 Nginx 上配置错误的虚拟主机

2. SSL 证书已过期(NET::ERR_CERT_DATE_INVALID

它的含义:每个 SSL 证书都有一个有效期——Let’s Encrypt 通常为 90 天,商业证书最多为 1-2 年。一旦该期限过去,浏览器会立即拒绝连接。

常见原因:

  • 自动续期无声地失败(cron 作业错误、DNS 问题、端口 80 被阻止)
  • 忘记手动续期
  • 证书已续期但未被网络服务器重新加载

3. 混合内容错误

它的含义:页面通过 HTTPS 提供,但某些嵌入的资源——图像、JavaScript 文件、样式表、iframe——仍然通过普通 HTTP 加载。浏览器会阻止或警告这些不安全的子资源。

常见原因:

  • 带有硬编码 http:// URL 的旧内容
  • 使用 HTTP 端点的第三方小部件或脚本
  • 从 HTTP 迁移到 HTTPS 的网站,但未更新内部链接

4. NET::ERR_CERT_AUTHORITY_INVALID

它的含义:证书由浏览器不信任的证书颁发机构 (CA) 颁发。这可能发生在自签名证书或来自私有/内部 CA 的证书中。

常见原因:

  • 在生产环境中使用自签名证书
  • 证书链不完整(缺少中间证书)
  • 来自已被浏览器供应商不信任的 CA 的证书

5. SSL_ERROR_RX_RECORD_TOO_LONG / 协议不匹配

它的含义:浏览器和服务器无法就相互 SSL/TLS 协议版本或密码套件达成一致。当服务器仍然支持已弃用的协议(如 SSLv3 或 TLS 1.0)时,这种情况经常发生。

常见原因:

  • 服务器配置为使用过时的 TLS 版本
  • 防火墙或负载均衡器在错误的端口上拦截 HTTPS 流量
  • HTTP 流量被发送到 HTTPS 端口

6. 过时的浏览器

它的含义:较旧的浏览器可能不支持现代 TLS 版本(TLS 1.2 或 1.3)、更新的密码套件或更新的证书格式,导致有效的证书显示为损坏。

如何作为用户修复 SSL 错误

如果您访问网站并遇到 SSL 警告,问题可能并不总是在服务器端。以下是排除客户端问题的步骤:

陈旧的缓存数据可能导致浏览器引用旧的、无效的证书响应。

Chrome:

  1. Ctrl + Shift + Delete(Windows/Linux)或 Cmd + Shift + Delete(Mac)
  2. 将时间范围设置为所有时间
  3. 选中缓存的图像和文件以及 Cookie 和其他网站数据
  4. 点击清除数据

Firefox:

  1. 转到设置 → 隐私和安全 → Cookie 和网站数据
  2. 点击清除数据

清除后,关闭并重新打开浏览器,然后重新访问该网站。

步骤 2:验证您的系统日期和时间

SSL 证书验证对时间很敏感。如果您的系统时钟错误——即使只差一天——浏览器也可能得出结论,有效证书已过期或尚未激活。

Windows:

  1. 右键单击任务栏中的时钟 → 调整日期/时间
  2. 启用自动设置时间自动设置时区

macOS:

  1. 转到系统设置 → 常规 → 日期和时间
  2. 启用自动设置日期和时间

Linux:

sudo timedatectl set-ntp true
timedatectl status

步骤 3:更新您的浏览器

现代 SSL/TLS 证书使用较旧浏览器版本不支持的算法和扩展。始终运行最新的稳定版本的浏览器。

  • Chrome:菜单 → 帮助 → 关于 Google Chrome → 更新
  • Firefox:菜单 → 帮助 → 关于 Firefox → 更新
  • Edge:菜单 → 帮助和反馈 → 关于 Microsoft Edge → 更新

步骤 4:暂时禁用 VPN 或代理

VPN 和代理可以拦截 HTTPS 连接并替换自己的证书,触发浏览器警告。暂时禁用它们以确定它们是否是错误的来源。

步骤 5:检查防病毒 HTTPS 扫描

某些防病毒程序通过注入自己的证书来执行 SSL 检查。如果防病毒根证书不被浏览器信任,这会导致 SSL 错误。检查您的防病毒设置,如有必要,禁用 HTTPS 扫描。

如何作为网站所有者修复 SSL 错误

如果您自己的网站抛出 SSL 错误,以下步骤将帮助您系统地诊断和解决它们。

修复 1:续期过期的 SSL 证书

使用 Let’s Encrypt 和 Certbot:

首先,检查您当前证书的过期日期:

sudo certbot certificates

续期 Certbot 管理的所有证书:

sudo certbot renew

强制续期,即使证书离过期还很远:

sudo certbot renew --force-renewal

续期后,重新加载网络服务器以应用新证书:

# For Nginx
sudo systemctl reload nginx

# For Apache
sudo systemctl reload apache2

使用 cron 作业自动续期:

sudo crontab -e

添加以下行以每天检查两次续期(Let’s Encrypt 推荐):

0 0,12 * * * certbot renew --quiet --post-hook "systemctl reload nginx"

> 专业提示:如果您使用 AlexHost VPS 托管,Certbot 可以直接在您的 Linux VPS 上安装和配置,让您完全控制证书管理和自动续期。

修复 2:解决 NET::ERR_CERT_COMMON_NAME_INVALID

此错误需要验证您的证书是否覆盖您的网站使用的确切域。

检查您的证书覆盖的域:

sudo certbot certificates

或直接检查证书:

openssl s_client -connect yourdomain.com:443 -servername yourdomain.com 2>/dev/null | openssl x509 -noout -text | grep -A2 "Subject Alternative Name"

如果证书不覆盖 example.comwww.example.com,使用两者重新颁发:

sudo certbot --nginx -d example.com -d www.example.com

或使用 Apache:

sudo certbot --apache -d example.com -d www.example.com

检查您的虚拟主机配置(Nginx):

server {
    listen 443 ssl;
    server_name example.com www.example.com;
    ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
}

确保 server_name 与证书上的域完全匹配。

修复 3:修复混合内容错误

混合内容是从 HTTP 迁移到 HTTPS 后最常见的问题之一。

步骤 1:识别混合内容

打开浏览器的开发者工具(F12)→ 控制台选项卡。混合内容警告显示为:

Mixed Content: The page at 'https://example.com' was loaded over HTTPS, 
but requested an insecure resource 'http://example.com/image.jpg'.

步骤 2:更新数据库中的硬编码 HTTP 链接(WordPress 示例)

使用 WP-CLI 工具或”Better Search Replace”之类的插件来更新所有 HTTP 引用:

wp search-replace 'http://example.com' 'https://example.com' --skip-columns=guid

步骤 3:在 Nginx 中添加 HTTPS 升级标头

add_header Content-Security-Policy "upgrade-insecure-requests;";

或在 Apache 的 .htaccess 中:

Header always set Content-Security-Policy "upgrade-insecure-requests;"

步骤 4:强制 HTTPS 重定向

在 Nginx 中:

server {
    listen 80;
    server_name example.com www.example.com;
    return 301 https://$host$request_uri;
}

在 Apache .htaccess 中:

RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

修复 4:解决证书链问题(ERR_CERT_AUTHORITY_INVALID

不完整的证书链是此错误的常见原因,尤其是在缺少中间证书时。

使用 OpenSSL 验证链:

openssl s_client -connect yourdomain.com:443 -showcerts

查找完整的链:您的域证书 → 中间 CA → 根 CA。

在 Nginx 中修复——确保您使用的是 fullchain.pem(而不仅仅是 cert.pem):

ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;

在 Apache 中修复:

SSLCertificateFile /etc/letsencrypt/live/example.com/cert.pem
SSLCertificateChainFile /etc/letsencrypt/live/example.com/chain.pem

使用 SSL Labs 服务器测试来验证您的完整证书链是否正确提供。

修复 5:更新 TLS 协议配置

禁用过时的协议并在您的服务器上强制执行 TLS 1.2 和 TLS 1.3。

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;

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

进行更改后重新加载网络服务器。

修复 6:启用 HTTP 严格传输安全 (HSTS)

HSTS 指示浏览器始终为您的域使用 HTTPS,防止协议降级攻击和混合内容问题。

Nginx:

add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;

Apache:

Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"

> 警告:仅在确信您的整个网站都在 HTTPS 上运行时才启用 HSTS,使用 preload。此指令非常难以撤销。

SSL 证书类型:选择正确的

并非所有 SSL 证书都相等。为您的用例选择正确的类型可以防止许多常见错误首先发生。

证书类型最适合覆盖范围
域验证 (DV)博客、个人网站单个域或通配符
组织验证 (OV)商业网站单个域或通配符
扩展验证 (EV)电子商务、银行单个域
通配符 SSL具有子域的网站*.example.com
多域 (SAN)多个域最多 100+ 个域
Let’s Encrypt(免费 DV)任何网站单个域或通配符

对于专业网站和在线商店,投资受信任的商业颁发证书会增加额外的可信度。AlexHost 为所有类型的网站提供 SSL 证书,从基本 DV 证书到高级多域选项。

主动 SSL 管理:在错误发生前防止它们

被动修复 SSL 错误成本很高。以下是如何提前处理它们的方法:

1. 监控证书过期

设置监控工具,在证书过期前向您发出警报:

  • UptimeRobot——免费 SSL 监控,带有电子邮件/短信警报
  • Certbot 的内置续期——在过期前 30 天自动续期 Let’s Encrypt 证书
  • Nagios / Zabbix——服务器管理员的企业级监控

2. 使用可靠的托管环境

SSL 错误通常是配置不当或资源不足的托管环境的症状。VPS 托管计划为您提供根访问权限来管理您自己的 SSL 证书、精确配置 TLS 设置以及自动续期——共享托管环境通常限制的功能。

对于需要最大性能和专用资源的大型操作,专用服务器提供对您的 SSL/TLS 堆栈、防火墙配置和证书基础设施的完全控制。

3. 使用控制面板简化 SSL 管理

如果您更喜欢基于 GUI 的方法来管理 SSL 证书,控制面板会简化整个过程。使用 带 cPanel 的 VPS,您可以通过可视界面安装、续期和管理 SSL 证书,无需接触命令行——非常适合管理多个客户端网站的代理。

或者,探索完整的 VPS 控制面板范围,找到适合您工作流程的管理界面。

4. 定期测试您的 SSL 配置

使用这些工具运行定期 SSL 健康检查:

  • SSL Labs (ssllabs.com/ssltest)——对您的 TLS 配置进行全面评分
  • Why No Padlock (whynopadlock.com)——检测混合内容问题
  • DigiCert SSL 检查器——验证证书链和过期

5. 保持您的域名注册最新

过期的域名如果您的 DNS 记录变为非活动状态,可能会间接导致 SSL 问题。确保您的域名始终续期且 DNS 配置正确。AlexHost 的 域名注册服务包括轻松的续期管理,以保持您的域名活跃和 SSL 链完整。

15%

全场主机优惠15%

测试技能,享折扣

使用代码:

Skills
开始使用