证书链不完整是https红锁主因,需手动合并域名证书与中间证书为fullchain.pem;hsts启用前须确保证书链完整且https稳定,否则将导致访问失败。

证书已装但浏览器仍提示“不安全”,先查证书链是否完整
宝塔里点保存、Nginx也重启了,HTTPS还是红锁?大概率不是证书没装,而是证书链断了——特别是移动端、旧系统、企业设备访问时直接报错,连页面都打不开。Chrome 有时会自动补中间证书,但这是赌运气,不能当解决方案。
- 在宝塔【网站】→【设置】→【SSL】→【查看证书】,检查
证书内容框里有没有至少两段以-----BEGIN CERTIFICATE-----开头的区块(第一段是你的域名证书,第二段必须是中间证书) - 如果只有一段,立刻去证书颁发商后台下载
fullchain.pem或ca_bundle.crt,用文本编辑器把中间证书**追加在域名证书下方**,两段之间必须空一行,不能多也不能少 - 别信“自动修复”按钮——它只对 Let’s Encrypt 和少数几家商业CA有效;如果你用的是腾讯云、阿里云、iTrustSSL 等签发的证书,大概率识别不了,得手动拼
启用 HSTS 后网站打不开或反复跳转,本质是头信息配置冲突
HSTS 不是开个开关就完事。一旦生效,浏览器会强制走 HTTPS 并拒绝任何 HTTP 请求,但如果证书链本身有问题,或者 Nginx 配置里混着 HTTP 重定向规则,就会陷入“想跳又跳不过去”的死循环。
- 确认 HSTS 前,先确保
https://能稳定访问且锁图标正常——否则启用 HSTS 相当于主动封死自己 - 宝塔默认在【SSL】页勾选
强制HTTPS,这其实是加了 301 跳转规则;而 HSTS 是通过响应头Strict-Transport-Security控制的,两者逻辑不同,但共存时容易引发重定向环(比如 HTTP → HTTPS → 再被 HSTS 拦截再跳) - 真要启用 HSTS,建议直接进【网站】→【配置文件】,在
server块里加这一行:add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;
注意:always参数必须加上,否则 Nginx 在 301/4xx 响应中不会输出该头
preload 列表提交失败:域名未通过 HSTS 预加载校验
点宝塔里“提交到 HSTS Preload List”后一直卡在 pending 或返回 error?这不是面板问题,而是 Chrome 官方校验机制在拦你。预加载不是功能开关,是一份写死在浏览器源码里的白名单,审核极严。
- 必须满足三项硬性条件:
max-age ≥ 31536000(一年)、includeSubDomains开启、preload标记存在,三者缺一不可 - 主域名和所有子域名(包括
www、api、cdn)都必须能通过 HTTPS 访问,且每个域名的证书链都完整——漏一个,整个域名就被拒 - 提交前用 hstspreload.org 手动检测,它会明确告诉你哪条不满足;宝塔那个按钮只是帮你生成 header,不负责验证
移动端访问异常、IoT 设备连接失败,根源常在证书链+HSTS 双叠加
电脑上看着好好的 HTTPS,在手机微信内置浏览器、海康摄像头、POS 机里打不开?这类设备既不自动下载中间证书,也不支持 HSTS 的动态策略,全靠你部署的 PEM 文件一次性给全。
- 务必使用
fullchain.pem而非cert.pem作为证书路径——前者含域名证书 + 中间证书,后者只有域名证书 - 检查 Nginx 配置中
ssl_certificate指向的是否为合并后的文件,常见错误是宝塔界面上传了完整证书,但配置文件里还写着/www/server/panel/vhost/cert/example.com/cert.pem - HSTS 的
preload标记一旦生效,连首次 HTTP 请求都会被浏览器拦截;IoT 设备若不支持 HTTPS 或证书校验逻辑老旧,将彻底无法握手——上线前务必用真实设备实测











