SSL 证书检查工具
读取网站实际提供的证书——包括浏览器拒绝展示的那些有问题的证书。
为什么这件事还需要一件工具
你的浏览器本来就会检查证书,而且比任何网页做得都好。它不会做的,是把一张坏掉的证书拿给你看。验证失败时,你得到的是一个拦截页和一个含糊的理由;证书本身还藏在再点两下之后,如果它还够得着的话。而真正值得诊断的那些故障,往往恰恰是你的浏览器毫无怨言、别人的浏览器却不干的那些。
所以上面这项检查跑在服务器上,而且刻意不去信任它找到的东西,只报告主机实际出示了什么。过期的、自签的、签给另一个名字的——所有这些都会作为数据返回,而不是变成一堵墙。
四种故障,按你会遇到的顺序
已过期
最常见,也最容易避免。每一个浏览器都会显示整页警告,而对任何不愿意点穿它的人来说,这个站点等于挂了。它之所以发生,是因为某个人在三百九十八天前手工续了一次期,然后离职了。
主机名不匹配
证书是真的、也还在有效期内,但它不覆盖你用的那个名字。几乎总是通配符规则在作祟:*.example.com 不覆盖 example.com。两个名字都必须在证书上,而本检查器会把它找到的每一个名字都列出来,让你一眼看出少了哪一个。
证书链不完整
这一种会催生出最古怪的缺陷报告。服务器发了自己的证书,却漏掉了把它连到受信任根证书的那张中间证书。桌面浏览器通常会自己去把缺的那块取回来,一声不吭。而移动浏览器、Java 客户端、老一点的 Android、curl 以及大多数 API 消费方都不会,它们就是直接失败。
结果就是:这个站点在开发者的笔记本上完美运行,对其他所有人却时好时坏——这就是为什么上面那个证书链区块,列出的是服务器实际发了什么,而不是能被重建出什么。
自签名
由它自己签发,所以默认没有任何客户端信任它。在一个由你自己分发证书的内部服务上,这完全合理;在公共互联网上,则从来都不能用。
那把锁意味着什么,又不意味着什么
一张有效的证书确立两件事:你正在与掌握该域名的那一方通话,以及你们之间的流量在传输途中无法被读取或篡改。这确实很有价值,而这也就是它的全部保证。
它没有确立的,是那位运营者是否诚实。证书免费,几秒钟就能签发,所以钓鱼网站配有有效证书是理所当然的事。那把锁从来就不意味着「这个网站是安全的」——这也是为什么过去这几年里,浏览器一直在悄悄地把它从一个正面指示中撤下来,如今只标记加密的缺席。
你证书上的一切都是公开的
在往一张证书上添加主机名之前,这一点值得知道。自 2018 年起,每一张受公共信任的证书都必须提交到证书透明度——那是只可追加的公共日志,浏览器会去核对它们,并拒绝那些不在日志里的证书。
安全上的好处是实实在在的:证书颁发机构没法在你眼皮底下悄悄把你域名的证书签给别人,而不在某个你可以盯着看的日志里留下痕迹。副作用则是:每一张证书上的每一个名字都是可搜索的。把 staging-admin.example.com 放进一张公共证书,等于向任何愿意看一眼的人公布了这台主机的存在,而人们确实会去看——监控这些日志是一个标准的侦察步骤。
续期即将不再是可选项
公共证书的最长有效期这些年一直在下降:五年,然后三年,然后两年,而自 2020 年起是 398 天。CA/浏览器论坛如今商定了一份时间表:2026 年降到 200 天,2027 年 100 天,到 2029 年是 47 天。
在 47 天这个数上,手工续期意味着在每一台主机上一年干八次,而失败的后果是你的站点下线。通过 ACME 做自动化——Let's Encrypt,或者你的托管商提供的任何方案——不再只是「良好实践」,而成了唯一行得通的选项。如果你是因为收到一封到期邮件才来这里查证书的,那么底下真正要修的就是这件事。
本工具不检查什么
刻意做得很窄。它读取证书和协商出来的连接,就到此为止。它不会去抓取页面,不会给你的加密套件评级,不会测试协议漏洞,也不会给你的配置打一个百分制的分。要做一次完整的服务器配置审计,Qualys SSL Labs 是那件成名已久的工具,而且做得很彻底。
至于相邻的那些问题:DNS 泄漏检测覆盖的是「在替你作答的是哪台解析器」,而 IP 查询覆盖的是「一个给定的地址属于谁」。
关于证书,常被问到的问题
网站在我的浏览器里能打开,这里却说证书不受信任。谁对?
两边都对,而常见的解释是证书链不完整。服务器本应发送自己的证书,外加把它连到受信任根证书的那些中间证书。如果它只发了自己的,桌面浏览器往往会替它遮掩这个缺口,自己去把缺失的中间证书取回来——这个特性叫 AIA fetching。而许多移动浏览器、API 客户端、Java 应用和命令行工具不会。于是网站对你能用,对你的一部分用户却打不开,这正是那种被报成「只对某些人坏掉」的缺陷。本检查器报告的是服务器实际发送了什么。
为什么我的证书对 www.example.com 有效,对 example.com 却无效?
因为通配符只覆盖一级标签,而且只覆盖最左边那一级。*.example.com 匹配 www.example.com 和 api.example.com,但它不匹配 example.com 本身,也不匹配 a.b.example.com。裸域名必须单独列进主体备用名称(SAN)里。这是最常见的证书错误之一,其后果就是一个带 www 前缀能用、不带就坏掉的站点。
证书该签多长时间?
如今公共证书的上限是 398 天,而整个行业正在坚决地往更短走——CA/浏览器论坛已经商定了一份时间表,到 2029 年把上限降到 47 天。实际后果是手工续期将不再可行。如果你的证书还没有通过 ACME 或你的托管商自动续期,那值得在期限替你做决定之前先修好。
SSL 和 TLS 有什么区别?
TLS 是协议本身;SSL 是它的前身,而 SSL 的最后一个版本已在 2015 年被废弃。今天在跑的一切都是 TLS。「SSL」这个词还活在产品名、证书名和职位头衔里,纯粹是出于习惯——这也是为什么这个页面叫 SSL 检查器,而它报告的每一个值其实都是 TLS。如果某台服务器真的还提供 SSL 3.0,那本身就是一项发现。
证书有效是否意味着网站安全?
不意味着,而把这两件事混为一谈,是关于证书最常见的误解。证书证明的是:你正在与掌握该域名的那一方通话,而且中间的任何人都无法读取或篡改这段对话。它对那一方是否诚实只字未提。钓鱼网站配有有效证书是家常便饭——证书免费,几秒钟就能签发。那把锁的意思是「已加密」,不是「可信任」。
我能看到为我的域名签发过的所有证书吗?
能,而且值得一看。每一张受公共信任的证书都必须记入证书透明度(Certificate Transparency),那是一组只可追加的公共日志,浏览器会去核对。在 crt.sh 上搜索你的域名,你会看到为它签发过的每一张证书——发现一张你没申请过的证书,就是这么发现的。这同时也意味着你证书上的主体备用名称是公开的,所以把一个内部私有主机名放进公共证书,等于把那个主机名公之于众。
A certificate protects the connection between a visitor and one site. It does nothing about what the networks in between can see about which sites you visit at all — that metadata is visible even when every connection is encrypted. What your network can still see
最后审校于 。发现有内容过时了? 告诉我们.
