SSL 证书在线检查
连上对方的 443 端口握一次手,看它此刻真正在用的证书:谁签发的、什么时候到期、覆盖哪些域名、链是否完整。
需服务端处理这个工具由服务器代为访问网络
你要检查的域名或网址会发送到本站服务器,由服务器发起查询,结果只返回给这个页面。
服务器不保存查询内容,也不记录你查了什么,只按来源 IP 限制频率(每分钟 30 次)防止被当跳板刷。站上其它工具仍然全部在浏览器本机完成。
例子:
无论填 http 还是 https,这里都会用 TLS 连过去,端口默认 443,也可以在网址里指定 :8443 这类端口。
证书检查到底在检查什么
浏览器地址栏上的那把锁,背后是四件独立的事:证书没有过期、证书里的域名和你在访问的域名对得上、签发这张证书的机构在你的信任列表里、以及从这张证书到根证书之间的链条完整。四件事里任何一件不成立,浏览器就会报警。这个工具把四件事分开报出来,是因为它们的修法完全不同:过期要重新签发,域名不符要改 SAN 或者换证书,机构不受信通常是自签,链不完整只要把中间证书补上。
最容易踩的坑是免费证书的有效期。Let's Encrypt 默认签 90 天的证书,续期必须自动化,靠人工记日子迟早会漏。判断有没有漏的方法很简单:看剩余天数。90 天期的证书剩 30 天左右说明还有一轮续期机会,剩 10 天以内基本可以确定自动续期任务已经坏了——acme.sh 和 certbot 的续期失败经常只是默默写在日志里,不会发通知,所以定时看一眼剩余天数是最省事的巡检方式。
证书链这一栏平时不太需要关注,但它解释了两种很难理解的故障。一种是「浏览器能打开、程序打不开」:浏览器会把缺失的中间证书自己去补,而 curl、Java、Python 这些客户端补不了,于是报「unable to get local issuer certificate」。另一种是「安卓老版本打不开」:老版本系统不认某些新根证书,而这在桌面浏览器上完全看不出来。
SAN 列表的膨胀也值得留意。一张证书可以同时覆盖很多域名,很多 CDN 的通用证书里塞着几十上百个域名,这意味着只要其中任何一个域名出问题,整张证书都可能被吊销,于是所有共用它的站点一起受影响。反过来,如果你的证书 SAN 里有别人家的域名,那说明你用的不是独占证书,别人被吊销时你也会跟着挂。
最后是 OCSP 和吊销。证书被吊销之后,浏览器要能查到「这张已经作废」,才能有所反应,而 OCSP 服务器本身可能挂掉或被墙。这也是为什么 OCSP Must-Staple 和短有效期会成为趋势——相比依赖一道可能失效的吊销查询,让证书本身在几十天后自然过期更可靠。看到这里只剩几十天的证书,与其说是「快到期了」,不如说这是它设计上应有的样子,关键只在于续期有没有自动化。
常见问题
这个工具和站上的「X.509 证书解析」有什么区别?
那个解析的是你手上这份 PEM 或 DER 文件,适合排查「我拿到的证书文件对不对」;这个直接连到对方的 443 端口握手,看到的是此刻服务器真正在用的证书,以及浏览器会不会报错。网站提示「不是私密连接」时要用这个。
相关:X.509 证书解析
浏览器提示「证书链不完整」是什么意思?
意思是服务器只发了自己的证书,没把中间证书一起发过来。多数浏览器会自己去补,所以能正常访问;但 Java、Python requests、老版本 Android 这类不做补链的客户端会直接失败。解决办法是在服务器配置里把中间证书和站点证书拼成一个文件一起下发。
剩余天数怎么看才算安全?
这不是「多少天算安全」的问题,而是自动续期有没有生效的问题。主流 CA 已经不支持一年期以上的证书,所以有效期普遍在 90 天到一年之间。剩 30 天以内就该去看续期任务了;如果证书是 90 天期的,剩 30 天往往意味着已经错过了一轮自动续期。
为什么连接某些站点会直接失败?
常见三种:一是这个端口不是 HTTPS 服务(比如对 80 端口做 TLS 握手);二是有 WAF 或防火墙拦掉了非浏览器的来源;三是对方只接受特定的 TLS 版本或加密套件,而服务器这边协商不上。这三种都会把具体原因写在错误提示里。
为什么证书校验失败时还能看到内容?
因为握手时有意忽略了校验结果——证书有问题正是这个工具要回答的问题,如果跟着报错,用户只会看到「连接失败」,看不到到底是过期、域名不匹配还是缺中间证书。校验结论单独列在结果上面,不影响下面证书信息的读取。
检查用的域名会发到你们服务器吗?
会。这个工具必须由服务器去连对方的 443 端口,浏览器做不到(跨域限制拿不到别的站点的证书)。服务器只做一次握手并读取公开的证书信息,不保存也不记录你检查了什么,只按来源 IP 限流。