
你申请了证书,按照教程一步步配好了Nginx,重启了服务。打开浏览器,地址栏里还是没有锁——或者锁是灰色的,点开写着“连接不安全”。你检查了配置,觉得没错。但浏览器就是不给通过。
HTTPS的安全状态是浏览器说了算的。证书本身没问题,但部署环节出了问题,浏览器就会拒绝信任。今天把最常见的6个排查方向整理出来。
先看一个数据
据GlobalSign的分析,证书安装后仍提示不安全的问题中,80%集中在“证书链不完整”和“域名匹配异常”两大核心问题上。这两个方向的修复成本都不高,但容易被忽略。
排查一:证书链不完整
这是什么意思:SSL证书的信任体系由“根证书→中间证书→服务器证书”三层构成。根证书预置在浏览器里,你不需要管。CA机构给你的是服务器证书和中间证书。如果只装了服务器证书,没装中间证书,浏览器就找不到完整的信任路径,判定证书不可信。
症状:
修复方法:
- Nginx:确认
ssl_certificate指向的是fullchain.pem(包含服务器证书+中间证书),而不是cert.pem。如果CA只给了两个单独的文件,用文本编辑器把服务器证书和中间证书合并成一个文件——服务器证书在前,中间证书在后。 - Apache:分别配置
SSLCertificateFile和SSLCertificateChainFile,确保中间证书已包含。
验证:用openssl s_client -connect yourdomain.com:443 -showcerts查看输出的证书链是否完整。只有一张证书就是中间证书没装。
排查二:域名匹配异常
证书是绑定域名的。你申请的是example.com的证书,但用户访问的是www.example.com,浏览器就会提示不安全。
常见场景:
- 单域名证书用在多个子域名上(如证书只绑
example.com,却用在blog.example.com) - 通配符证书的级别限制:
*.example.com覆盖www.example.com,但不覆盖api.shop.example.com(二级子域名) - 证书包含
www前缀但用户访问不带www,反之亦然
修复方法:
排查三:混合内容
证书部署正确,浏览器地址栏也有锁,但锁是灰色的,提示“部分内容不安全”。这是因为HTTPS页面里引用了HTTP加载的图片、CSS、JS、字体等资源,浏览器判定为混合内容。
症状:
- 地址栏的锁带感叹号或黄色三角
- 按F12打开开发者工具,Console里出现“Mixed Content”警告
- 部分资源加载失败,页面样式错乱
修复方法:
- 硬编码的
http://资源改成https://或使用//协议相对路径(浏览器自动匹配当前页面协议) - 如果是WordPress,在数据库中批量替换资源URL:
UPDATE wp_posts SET post_content = REPLACE(post_content, 'http://旧域名', 'https://新域名') - 在Nginx添加
upgrade-insecure-requests响应头,强制浏览器升级所有HTTP请求到HTTPS
排查四:证书过期或被吊销
证书有有效期,过期后浏览器会直接提示“证书已过期”,并阻断安全连接。部分CA机构也会因私钥泄露或主体信息变更吊销证书,吊销后同样无效。
修复方法:
排查五:CDN或WAF的证书未同步
用了CDN或WAF的用户,源站配置了证书,但在CDN/WAF控制台里证书没同步或没有开启HTTPS回源。浏览器访问时经过CDN/WAF,拿到的是旧的或不存在的证书配置,从而触发不安全警告。
修复方法:
排查六:浏览器缓存或系统信任库问题
证书配置正确,部分浏览器仍然提示不安全。这种情况通常是客户端缓存了旧证书信息,或者系统根证书库未更新,无法识别最新CA机构的根证书。
修复方法:
- 清除浏览器缓存,使用无痕模式访问测试
- 更换不同浏览器测试(Chrome、Edge、Firefox),确认是否是特定浏览器的问题
- 用
curl -I https://你的域名测试,如果curl返回正常而浏览器异常,基本是缓存问题
推荐使用的排查工具
在动手改配置之前,先用工具快速定位问题方向:
- SSL Labs(ssllabs.com/ssltest):输入域名,一键检测证书链完整性、域名匹配性、TLS协议配置
- 浏览器开发者工具(F12):查看Console里的混合内容警告
- openssl命令行:
openssl s_client -connect domain.com:443 -showcerts查看证书链
真实案例
一台服务器配置了Let’s Encrypt证书,Firefox访问正常,Chrome提示“证书不受信任”。排查发现ssl_certificate只配置了服务器证书,没有包含中间证书。把cert.pem替换为fullchain.pem后,Chrome恢复正常。
最后一句
HTTPS配置完后,用SSL Labs跑一遍检测。证书链是否完整、域名是否匹配、有没有混合内容,它都会告诉你。证书链和域名匹配这两个问题占了八成,先查这两个方向,大部分问题都能定位。
如果这6个方向都排查了还是不行,大概率是证书本身有问题——比如用了自签名证书或非权威CA签发的证书,换一家主流CA重新申请即可。排查的时候按顺序走,别跳步,问题总会找到。




