什么是证书透明度(CT)日志?

证书透明度是一套公开的证书登记日志,签发的每一张公开证书都要记进去。任何人都能查某个域名签过哪些证书,包括不是本人申请的那些。

第 16 期介绍过证书的作用。这套体系能运转,靠的是"只有域名的主人才申请得到这个域名的证书"这个前提。前提被打破过一次:2011 年,一家证书机构被入侵,攻击者用它签出了多个知名域名的假证书,浏览器和用户都不知道。事情暴露之后,修补办法之一是让签发行为无法隐藏。

证书透明度就是这套设计。它由一批只增不改的日志组成,证书机构在正式签发之前,先把证书提交给日志,日志返回一个签名时间戳;证书机构把这个时间戳一并放进证书里。浏览器连接网站时会检查证书里有没有时间戳——没有的话,证书可能不被接受。

日志本身是公开的,任何人都能提交、能查询。对域名持有者来说,这意味着可以定期查自己名下出现过哪些证书。如果发现一张自己没申请过的,可能是有人拿你的域名去签了证书,也可能是内部有人绕开了正规流程。查到之后可以顺着这条线索往下追。

日志用哈希树的方式记账,每条新记录都和之前的记录串起来。这样即使日志运营方想隐瞒,别人也能通过比对树根发现它给出过不一致的结果。记录一旦写入就不能删改,也没有撤销机制——撤销发生在证书那一层。

查询入口是公开的,输入域名就能看到一串已签发的证书,包含签发机构、时间和序列号。它记录的是发生过什么,不判断证书是否合法,也不替持有者做决定。