「您的连接不是私密连接」:先找错误代码,再决定修哪里
浏览器弹出红色警告拦下访问,但不知道属于哪一种证书问题。
浏览器拦下一个 HTTPS 网站时,会用一个红色页面告诉你「您的连接不是私密连接」。Firefox 说的是「警告:面临潜在的安全风险」,措辞不同,含义一样:证书验证没通过,所以在你确认之前,浏览器不打算把内容交给你。
麻烦的地方在于,这一句话背后是七八种成因完全不同的故障 —— 证书过期、少签了域名、链不完整、签发机构不受信任……它们的修法互不相干,而这句话对所有情况都一模一样。
真正的线索是红屏下面那行大写代码。
先找到错误代码
| 浏览器 | 代码在哪里 |
|---|---|
| Chrome / Edge | 「您的连接不是私密连接」下方,NET::ERR_ 开头的一行;被折叠时点「高级」 |
| Firefox | 点「高级…」,展开后的段落里,SEC_ERROR_ 或 SSL_ERROR_ 开头 |
| Safari | 点「显示详细信息」,措辞比代码多,按下一节的症状对照 |
如果页面上完全没有 ERR_ 字样,而是写着「此网站无法提供安全连接」,那不是证书问题,跳到最后一节。
按代码对号入座
| 错误代码 | 实际发生了什么 | 怎么修 |
|---|---|---|
NET::ERR_CERT_DATE_INVALID | 证书过期了,或者还没到生效时间 | 证书过期 · 还没到生效时间 |
NET::ERR_CERT_COMMON_NAME_INVALIDSSL_ERROR_BAD_CERT_DOMAIN | 证书是有效的,但上面没有你访问的这个域名 | 证书不包含这个域名 · 泛域名不覆盖主域名 |
NET::ERR_CERT_AUTHORITY_INVALIDSEC_ERROR_UNKNOWN_ISSUER | 追不到一个受信任的签发机构 | 证书链缺中间证书 · 自签名证书 · 追溯不到受信任的根 |
NET::ERR_CERT_REVOKED | 证书被签发机构吊销了 | 证书被吊销 |
NET::ERR_CERT_WEAK_KEYNET::ERR_CERT_WEAK_SIGNATURE_ALGORITHM | 密钥长度或签名算法已不被接受 | RSA 密钥长度不足 |
ERR_CERTIFICATE_TRANSPARENCY_REQUIRED | 证书没有出现在公开的透明度日志里 | 证书透明度日志 |
NET::ERR_CERT_AUTHORITY_INVALID 那一行有三篇文章,因为它是最含糊的一个代码:自签名、私有 CA、公开 CA 但少发了中间证书,浏览器给出的反应完全相同。分辨方法在那三篇里都有对应的命令。
不想逐条对照的话,把域名填进证书检测,它会直接查出是哪一种,并给出对应的处理办法 —— 免登录,不用装东西。
先分清:只有你看到,还是所有人都看到
这一步比找代码更值得先做,因为它决定问题在谁那里。
换一个网络访问同一个地址 —— 用手机流量,或者让一个不在同一个办公室的人打开看看。
- 别人正常,只有你不行 → 问题在你这一侧。三个常见原因:本机时钟不准(证书有效期是按时间判断的,差几天就会报
ERR_CERT_DATE_INVALID);杀毒软件或企业网关开了 HTTPS 扫描,用自己的证书替换了真的那张;连着会劫持流量的公共 Wi-Fi。 - 所有人都不行 → 问题在服务器或证书上,按上一节的代码找对应的文章。
如果你是访客,不是这个站的管理员
你能做的只有排除自己这一侧:校准系统时间、换个网络、临时关掉杀毒软件的 HTTPS 扫描试一次。如果换了网络还是报错,那就是对方的站点配错了,你修不了,只能等他们修。
网上流传的做法是在红屏页面上直接敲 thisisunsafe(不是敲进地址栏)强行进入。它确实能进去,但它不解决任何问题,只是让浏览器不再提醒你。
这个警告存在的意义,是「配置错误」和「有人正在中间解密你的流量」看起来完全一样,浏览器分不出来,你也分不出来。绕过它,就是放弃这个唯一的区分手段。在自己的开发机或内网服务上、并且你确切知道警告为什么出现时,这么做是合理的;在任何需要输入密码、付款或查看私人信息的站点上,不要。
如果你是站长
先确认自己看到的和访客看到的是同一件事 —— 你的浏览器可能缓存过中间证书,因而比访客更宽容:
# 服务器实际发出的完整证书链,以及验证结果
openssl s_client -connect example.com:443 -servername example.com </dev/null 2>/dev/null \
| openssl x509 -noout -subject -issuer -dates
# 只看链是否完整:结果不是 0 就说明访客那边会报错
echo | openssl s_client -connect example.com:443 -servername example.com 2>&1 \
| grep "Verify return code"Verify return code: 0 (ok) 以外的任何结果,都对应上面表格里的某一行。
「此网站无法提供安全连接」不是证书问题
这句话(Chrome 里通常伴随 ERR_SSL_PROTOCOL_ERROR)说的是握手本身就没谈成,根本没走到验证证书那一步。常见成因是客户端和服务器没有共同支持的 TLS 版本或加密套件 —— 比如服务器只留了 TLS 1.2/1.3,而访问者用的是很旧的系统或设备。
排查方向见关闭 TLS 1.0 / 1.1。如果连接干脆超时或被拒绝,而不是握手失败,那是无法连接。
常见问题
检测一下你自己的域名
免登录,一次真实的 TLS 握手,直接给出结论:还有多少天到期、证书链是否完整、是否包含这个域名。
需要一张新证书?本站提供基于 Let's Encrypt 的免费签发,支持泛域名。
了解免费证书其他排错指南
- 证书过期了怎么办浏览器拦下访问,提示证书已过期或连接不是私密连接。
- 证书快到期了:先分清是没续期,还是续了没部署证书还没过期,但剩余天数已经不多了。
- 证书还没到生效时间:多半是时钟不对证书的生效时间还没到,被判定为无效。
- 证书透明度日志里出现了没见过的证书监控期间,域名下出现了不是本站签发的新证书。
- 无法连接:证书检测连不上服务器时的排查顺序检测连不上服务器,没能拿到证书。
- 关闭 TLS 1.0 / 1.1,只留 1.2 和 1.3服务器还在使用 TLS 1.0 或 1.1 协商连接。
- 证书不包含这个域名:ERR_CERT_COMMON_NAME_INVALID 的几种成因浏览器提示证书不适用于该网站,或者拿到了另一个站点的证书。
- 电脑打得开、手机 App 报证书错误:证书链缺少中间证书电脑浏览器打得开,手机 App、curl 或 Java 客户端却报证书错误。
- OCSP stapling:开了能快一点,不开也不算故障没有启用 OCSP stapling,首次握手会稍慢一些。
- 证书被吊销,或者链验证没通过证书被吊销,或者链验证没有通过。
- 自签名证书:什么时候没问题,什么时候必须换证书是自己签给自己的,浏览器不信任。
- 证书链追溯不到受信任的根:新根交叉签名与私有 CA浏览器打得开,curl、旧安卓或 Java 客户端却说找不到颁发者证书。
- RSA 密钥长度不足:为什么现在才被提醒证书的 RSA 密钥长度低于 2048 位。
- 泛域名证书为什么不覆盖主域名子域名都正常,直接访问主域名却报证书错误。
Last updated on