排错指南
证书还没到生效时间:多半是时钟不对
证书的生效时间还没到,被判定为无效。
证书上有两个时间:生效(notBefore)和到期(notAfter)。当前时间早于生效时间,验证方就会拒绝它——和过期一样彻底。
但证书真的「签早了」是极少数情况。绝大多数时候是某一端的时钟不对,而且往往是验证方那一端。
先看是谁的时间不对
echo | openssl s_client -connect example.com:443 -servername example.com 2>/dev/null \
| openssl x509 -noout -dates
date -u| 情况 | 含义 |
|---|---|
| 本机时间明显偏早 | 客户端时钟错了——最常见 |
| 本机时间正确、生效时间在未来 | 证书确实签早了,或者拿错了文件 |
| 只有部分客户端报错 | 那些客户端的时钟不对 |
时钟为什么会偏
- 没装或没跑 NTP:虚拟机、容器、嵌入式设备最常见。
- 掉电后时间回退:没有电池的设备重启会回到出厂时间。
- 时区当成了时间:配置里写错时区导致偏移若干小时,证书刚签发时正好卡在窗口里。
- 镜像里固化了旧时间:构建镜像时的时间被带进了运行环境。
timedatectl set-ntp true # systemd
chronyc makestep # chrony
ntpdate -u pool.ntp.org # 老系统证书确实签早了
少数 CA 会把生效时间设在签发时刻之前几小时,以容忍客户端时钟误差;也有相反的情况。如果确认本机时间正确而证书生效时间在未来,通常是:
- 部署了还没到生效时间的续期证书——续期提前签好,但提前部署了。等到生效时间即可,或者先回退到当前这张。
- 拿错了文件:把另一个环境或另一次签发的证书发上去了。核对序列号。
常见问题
检测一下你自己的域名
免登录,一次真实的 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