当前位置:首页 >  站长 >  建站经验 >  正文

SSL证书装了浏览器还提示不安全?八成是这两个环节没做对

 2026-09-21 12:56  来源: 互联网   我来投稿 撤稿纠错

  一键部署OpenClaw

证书申请成功了,Nginx 也配了 443,满心欢喜打开站点,结果地址栏还是红字“不安全”或“连接非私人”。这种事十次有八次出在两个环节:证书链不完整,或者页面里混着 http 资源。下面顺着这两个坑逐项排查,基本上能对号入座。

一、坑一:证书链不完整,浏览器不认

证书不是单独一张就够,它需要一个“链”:你的域名证书,上面连着中间证书,再连着根证书。服务器只发了域名证书、没带上中间证书时,部分浏览器(尤其手机端)会判定链不完整,直接标不安全。Nginx 里 ssl_certificate 应该指向 fullchain.pem(已含中间证),而不是单独的 cert.pem(只有域名证)。很多人把路径配错成后者,于是桌面 Chrome 偶尔能忍、手机直接报错。

另一个常见原因是证书绑定的域名和实际访问的域名对不上:证书只签了 example.com,用户用 www.example.com 访问,浏览器当然不信。签发时两个域名都要列进去(-d example.com -d www.example.com)。

二、坑二:混合内容,页面里夹着 http 资源

证书本身没问题,但页面里的图片、JS、CSS 用了 http:// 的绝对地址,浏览器会判定“页面并非全加密”,现代 Chrome 直接把锁标划掉、地址栏提示“不安全”。这种最隐蔽,因为页面能打开、样式也对,就是标不安全。

下面这段脚本扫一遍网页源码,把所有 http:// 开头的资源链接揪出来,帮你定位混合内容。它干什么用——找出拖垮 HTTPS 标识的明文资源;要改哪里——把 html_file 换成你的页面文件,或把 read 改成抓线上页面;跑完看什么——逐行打印出仍是 http 的资源地址,把这些改成 https 或相对路径即可。

# 扫描页面源码里的 http:// 明文资源(混合内容排查)
import re

html_file = "/www/wwwroot/example.com/index.html" # 换成你的页面
with open(html_file, encoding="utf-8", errors="ignore") as f:
html = f.read()

mixed = re.findall(r'src=["\'](http://[^"\']+)', html)
mixed += re.findall(r'href=["\'](http://[^"\']+)', html)
print("发现", len(mixed), "处明文 http 资源:")
for m in mixed:
print(" ", m)

跑完把列表里的地址改成 https 版本,或干脆写成相对路径(如 /static/a.png),再刷新就干净了。数据库里存的老 http 图片地址也要一起改,否则新发的页面又带上。

三、顺带查两个次要嫌疑

证书过期也会标不安全,用浏览器点锁标看“有效期”一眼能确认。还有人配了 443 却忘了在防火墙放通 443 端口,结果 https 根本连不上、回退到 http,自然不安全——云厂商安全组要把 443 加进放行规则。

四、验证修好的标准动作

修完别只看自己电脑,换手机流量、换无痕窗口再开一次,因为不同环境对证书链容忍度不同。地址栏要出现稳定锁标(不是灰、不是带警告),点进去看颁发者和有效期正常,混合内容为零,才算真正修好。

“装了还提示不安全”几乎都逃不出证书链和混合内容这两件事。先对证书链(用 fullchain、域名对齐),再清混合内容(全站 https 化),八成的红字就是这么消掉的。

相关阅读:

《网站SSL证书怎么申请?免费证书到HTTPS部署全流程》

《宝塔面板怎么用?建站、备份、安全三件套上手实操》

《网站怎么搭建?从域名到上线的一套完整流程(2026版)》

申请创业报道,分享创业好点子。点击此处,共同探讨创业新机遇!

相关文章

热门排行

信息推荐