部署 SSL 证书后,通常应该能够通过 HTTPS 安全访问网站。然而,有时即使 SSL 证书已经正确安装,浏览器依旧可能报错,提示证书无效、浏览器不信任或连接不安全等问题。这种情况可能源自多个原因,例如证书安装错误、浏览器缓存问题、域名配置问题等。

  一、常见的 SSL 报错类型

  在部署 SSL 证书后,浏览器报错的类型较为多样,以下是最常见的几种:

  1. 证书无效或过期:

  报错信息:Your connection is not private、This certificate has expired or is not yet valid。

  2. 浏览器不信任证书:

  报错信息:This site can’t provide a secure connection、NET::ERR_CERT_AUTHORITY_INVALID、The certificate is not trusted。

  3. 域名与证书不匹配:

  报错信息:Your connection is not private、Certificate does not match the domain name。

  4. 混合内容错误:

  报错信息:Mixed Content,通常是因为页面包含了通过 HTTP 加载的资源(如图片、脚本等)。

  5. 证书链不完整:

  报错信息:The SSL certificate is not trusted because the certificate chain is incomplete。

  二、排查步骤

  1. 检查证书是否已正确安装

  首先确认 SSL 证书是否已经正确安装,并且服务器是否能够提供有效的证书链。可以使用以下几种工具进行检查:

  使用 openssl 命令行工具

  你可以通过 openssl 命令来检查证书链是否完整,服务器是否正确返回了 SSL 证书。

openssl s_client -connect yourdomain.com:443

  命令输出示例:

CONNECTED(00000003)
depth=2 C = US, O = Let's Encrypt, CN = R3
verify return:1
depth=1 C = US, O = Let's Encrypt, CN = Let's Encrypt Authority X3
verify return:1
depth=0 CN = yourdomain.com
verify return:1
---
Certificate chain
 0 s:CN = yourdomain.com
   i:C = US, O = Let's Encrypt, CN = R3
 1 s:C = US, O = Let's Encrypt, CN = Let's Encrypt Authority X3
   i:C = US, O = Internet Security Research Group, CN = ISRG Root X1
---
Server certificate
-----BEGIN CERTIFICATE-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA3H3LfU0pQ69W33pPRHQdP...
...
-----END CERTIFICATE-----

  检查证书链是否完整: 上述输出中的 Certificate chain 部分会列出所有中间证书。确认每个中间证书是否都被正确返回。如果缺少中间证书,浏览器将无法验证证书的完整性,导致报错。

  查看服务器证书的有效期: Server certificate 部分显示的是服务器证书的内容,确保证书没有过期。

  2. 检查证书是否与域名匹配

  SSL 证书的 Common Name (CN) 或 Subject Alternative Name (SAN) 必须与网站的域名匹配。如果证书与域名不匹配,浏览器会报错并拒绝连接。

  证书中 Common Name (CN) 和 Subject Alternative Name (SAN) 必须与访问的域名一致。

  SAN 是备用域名字段,允许一个证书同时支持多个域名和子域名。

  使用 openssl 命令检查证书的域名匹配情况

openssl x509 -in your_cert.pem -text -noout

  输出示例:

X509v3 Subject Alternative Name:
    DNS:www.example.com
    DNS:example.com

  确保你访问的域名(如 www.example.com)在证书中的 SAN 或 CN 列表中。

  3. 证书是否过期或被撤销

  证书过期或被撤销是常见的导致浏览器报错的原因。你可以通过以下方式确认证书的有效期:

  使用 openssl 检查证书过期情况

openssl x509 -in your_cert.pem -enddate -noout

  输出示例:

notAfter=Aug 10 23:59:59 2023 GMT

  确保 notAfter 后面的日期没有超过当前日期。如果证书已经过期,需要重新申请并安装新的证书。

  检查证书是否被撤销

  如果你使用的是像 Let's Encrypt 这样的自动化证书颁发机构,你可以通过他们的 OCSP 服务检查证书是否被撤销:

openssl ocsp -issuer issuer_cert.pem -cert your_cert.pem -url http://ocsp.server.com

  4. 检查是否存在混合内容错误

  如果页面加载了部分通过 HTTP 协议的资源(如图片、脚本、CSS),浏览器会报错“混合内容”错误。

  使用浏览器开发者工具检查混合内容

  打开 Chrome 开发者工具(右键 > 检查或按 F12),切换到 Console 面板。

  查找类似如下的警告:

Mixed Content: The page at 'https://yourdomain.com' was loaded over HTTPS, but requested an insecure resource 'http://yourdomain.com/insecure-script.js'. This request has been blocked; the content must be served over HTTPS.

  此时,你需要检查并修复页面中引用的所有 HTTP 资源,确保它们都通过 HTTPS 加载。

  解决方法:

  更新网页中的所有资源链接为 HTTPS。

  使用绝对路径(如 https://yourdomain.com/image.jpg)而不是相对路径。

  5. 清除浏览器缓存和 SSL 状态

  有时,浏览器会缓存旧的证书信息,导致即使证书已更新,仍然报错。

  清除浏览器缓存

  Chrome: 设置 > 隐私与安全 > 清除浏览数据 > 选择缓存和Cookies。

  Firefox: 设置 > 隐私与安全 > 清除历史记录 > 选择缓存。

  清除 SSL 状态

  如果你在 Windows 上,可能需要清除系统的 SSL 缓存:

  在控制面板中选择 "Internet选项" > "内容" > "清除SSL状态"。

  6. 检查 Nginx / Apache 配置

  如果证书已正确安装,但浏览器仍报错,可能是 Web 服务器配置错误。

  Nginx 配置示例

  确保 Nginx 配置了正确的 SSL 证书路径和启用了 SSL:

server {
    listen 443 ssl;
    server_name yourdomain.com;
    
    ssl_certificate /etc/nginx/ssl/your_cert.crt;
    ssl_certificate_key /etc/nginx/ssl/your_cert.key;
    
    location / {
        root /var/www/html;
    }
}

  重新加载配置:

sudo nginx -s reload

  Apache 配置示例

  确保 Apache 配置了正确的证书路径:

<VirtualHost *:443>
    ServerName yourdomain.com
    SSLEngine on
    SSLCertificateFile /etc/ssl/certs/your_cert.crt
    SSLCertificateKeyFile /etc/ssl/private/your_cert.key
    SSLCertificateChainFile /etc/ssl/certs/chain.pem
</VirtualHost>

  重新启动 Apache:

sudo systemctl restart apache2

  SSL 证书部署后,浏览器报错的原因可能非常多样,但常见问题主要集中在证书安装错误、证书不匹配、过期、混合内容错误等。

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐