术语表 /开发者参考
根证书
- 根证书是什么?
- 根证书是证书链顶端自签名的信任锚,之所以被信任,只是因为您的操作系统或浏览器厂商将其预置在了系统中。
每一次证书检查都终止于一个根证书。根证书为自己签名,之所以被信任,只是因为它随设备一同预装在根证书库中;最著名的例子 DST Root CA X3 签发于2000年9月30日,恰好21年后到期。如果您仅凭浏览器的挂锁图标来判断一家交易所,您信任的是那份根证书列表,而不是该交易所本身的任何情况。
运作方式
根证书在颁发者字段和主体字段中写的是同一个机构,签署它的密钥就是它所认证的密钥。这种循环正是其要点所在。根证书之上没有任何对象为其背书,因此验证方无法拿它与更高层级的对象核对;只能在本地列表中查找该证书,并将该列表视为权威。
这些列表由少数几家公司维护。Apple、Microsoft、Mozilla 和 Google 各自运行一个根证书计划,并公布纳入标准、审计要求和移除程序;您的笔记本电脑或手机上的根证书库,就是您的厂商随软件一并发布的那一份。根证书的纳入会持续很长时间,因为移除一个根证书意味着要向每一台持有它的设备推送更新。ISRG Root X1 是 Let's Encrypt 背后的信任锚,签发于2015年6月4日,直到2035年6月4日才到期。
其结构性弱点在于,根证书库中的任何一个根证书都可以为任何名称背书。没有任何规则将荷兰的证书颁发机构限定于荷兰的域名,因此一家机构被攻破,就会同时动摇所有网站。DigiNotar 在2011年证明了这一点:攻击者于当年7月10日为 google.com 签发了一张伪造证书,并用它拦截伊朗用户的流量。Mozilla、Google 和 Microsoft 在2011年9月的头几天移除了 DigiNotar 的根证书,该公司在当月结束前就已破产。
在哪里会遇到它
根证书通过 BIP70 进入比特币领域,该提案要求钱包在支付界面显示公司名称之前,先验证商户的证书链直至受信任的根证书。桌面软件借用操作系统的根证书库来完成验证,移动软件则常常出错,Bitcoin Core 在0.20.0版本中彻底删除了这一功能。bitcoin.org 的开发者参考文档仍然列有这个术语,这也是如今人们查阅它的主要原因。
更有参考价值的对比是比特币自身的信任锚。全节点从硬编码在软件中的创世区块(日期为2009年1月3日)出发,由此起自行验证每一条规则。没有人能通过向您的手机推送更新,在这个信任锚中添加条目;也没有任何机构会因被攻破或受到施压,而为违反规则的区块背书。根证书库的运作方向则正好相反:信任从一份您没有编写、也无法审计的列表向下传递。
根证书 vs 叶证书
根证书标识证书颁发机构;叶证书标识服务器。根证书为自签名,有效期长达二十年,其私钥保存在离线的硬件模块中,每年在见证人在场的情况下取出几次。叶证书写明您实际连接的主机名,有效期为数月,其私钥存放在暴露于互联网的在线 Web 服务器上。人们说“证书有效”,往往只是指叶证书能够被解析、日期也对得上,但决定连接是否可信的问题是:证书链终止于哪个根证书。