术语表 /开发者参考
X.509证书
又称 X.509 certificate、数字证书。
- X.509证书是什么?
- X.509证书是一种经过签名的文件,将公钥与名称和有效期绑定在一起,也是您连接交易所时每一次 HTTPS 连接所依据的格式。
这一格式由来已久,也显出了年代感:X.509于1988年作为目录标准的一部分出现,至今仍在使用的互联网规范 RFC 5280则发布于2008年5月。证书是由签发者签名的结构化记录,并非机密,因此可以放心分发。它能证明的内容很有限:有人说服了某个机构,使其相信自己控制着某个名称。
运作方式
证书由一系列字段和覆盖所有字段的签名组成。
对读者而言,重要的字段不多。序列号向其签发者标识该证书。签发者字段写明由谁签名,主体字段写明证书所针对的对象,两个时间戳划定证书有效的时间窗口。主体公钥信息块中存放密钥本身。其余内容由扩展字段承载,其中一个扩展承担了大部分工作:subjectAltName 列出证书所覆盖的域名。
通用名称字段是经典的陷阱。它看起来像是存放域名的地方,多年来也确实如此,但 RFC 6125已于2011年3月弃用对它的读取,浏览器现在会忽略它。如果证书的 subjectAltName 没有列出您正在访问的网站,无论其通用名称写的是什么,验证都会失败。
过去十年间,证书的有效期大幅缩短。自2020年9月1日起签发的公开受信任 TLS 证书,有效期不得超过398天,此前先是三年,后来是两年;Let's Encrypt 则因续期已自动化而常规签发有效期为90天的证书。较短的有效期可替代吊销,而吊销机制从未可靠地发挥作用。
任何人都可以制作证书。用自己的密钥为证书签名,就得到自签名证书,其签发者和主体完全相同,这是一种完全有效的文件,但没有任何信任库会承认它。使证书值得信任的并非签名本身,而是签名者的身份。
在哪里会遇到它
点击任何浏览器中的挂锁图标,您看到的就是一份 X.509证书。
凡是软件必须核实某样东西确实来自特定厂商的地方,都会出现同样的文件格式:已签名的应用程序二进制文件、已签名的固件更新,以及部分硬件钱包携带的认证证书,厂商的应用程序借此区分正品设备和克隆设备。BIP70 曾把证书直接嵌入比特币支付请求,这是该格式唯一一次成为比特币协议的一部分。
有两个习惯可以保护买家。在存放资金的网站上遇到证书警告时,切勿点击继续访问,因为浏览器是在报告名称与密钥不匹配,而在交易所域名上,这种情况不存在无害的版本。另外请记住,欺诈网站上出现有效证书是常见情况,并不矛盾:验证针对的是名称,所以如果该名称与真实名称只是近似,证书就是在履行其职责,而您却会损失资金。
X.509证书 vs 叶证书
X.509是一种格式,叶描述的是位置。证书链中的每一份证书都是 X.509证书,包括中间证书和自签名的根证书,称其中某一份为叶证书,只是说它位于链的末端,标识的是实际的服务器,而不是授权进一步签发。两者的区别体现在一个扩展上:basicConstraints 将其标为认证机构的证书可以为其他证书签名,叶证书则不可以。