首先我来详细解析一下SSL证书透明度(Certificate    Transparency,简称CT)日志是什么,以及它对HTTPS部署的具体影响。

第一部分:什么是证书透明度(CT)日志?

简单来说,证书透明度(CT)日志是一个公共的、只可追加的、密码学保障的账本,用于记录和监控所有颁发的SSL/TLS证书。

1.    背景与问题

在CT出现之前,CA系统存在一个严重的安全漏洞:如果一个CA被入侵或者错误地签发了一个伪造的证书(例如,为    `google.com`    签发了一个不属于谷歌的证书),这个证书可以在没有任何人察觉的情况下被用于中间人攻击。

受害者(比如谷歌)很难知道这个假证书的存在,因为CA系统缺乏一个统一的、公开的监控机制。

2.    CT的核心目标

发现错误或恶意签发的证书:让域名所有者可以监控自己域名下被签发了哪些证书。

监督CA的行为:迫使CA的每一次证书签发行为都公开透明,接受公众和审计机构的监督。

防止恶意CA或CA入侵造成的损害**:通过日志机制,即使有坏证书被签发,也能被快速发现并阻止。

3.    CT是如何工作的?

CT引入了三个主要角色:

日志服务器(Log):由不同的组织(如谷歌、DigiCert、Let‘s    Encrypt等)运营。它们接收并记录证书,为每个证书生成一个“签名证书时间戳”(Signed    Certificate    Timestamp,简称SCT)。SCT是日志服务器对“我承诺将在未来某个时间把这个证书加入日志”的密码学担保。日志一旦写入,就不能被篡改或删除。

监控者(Monitor):定期从日志服务器拉取数据,检查是否有可疑证书。域名所有者、CA、安全研究人员都可以作为监控者。

审计者(Auditor):定期验证日志服务器是否行为诚实,例如,检查日志数据是否被篡改(利用Merkle树哈希保证)。

4.    关键证据:SCT(签名证书时间戳)

STC是整个CT机制的核心。    当一个证书被提交到CT日志时,日志服务器会返回一个SCT。这个SCT就是证书已被公开记录的证据。

浏览器在验证一个证书是否合规时,会检查这个证书是否带有有效的SCT。如果没有,浏览器就会认为这个证书是不透明的、可疑的,从而可能阻止访问。

第二部分:它对部署有何影响?

CT日志已经从最初的可选实验,变成了如今所有主流浏览器(如Chrome、Safari、Firefox)强制执行的信任标准。它对部署的影响主要体现在以下几个方面:

1.    证书签发环节的影响

CA必须提交证书到CT日志:现在,所有受信任的CA在为你签发证书时,必须将证书提交到多个CT日志服务器,并获取SCT。然后,CA需要将这个SCT以某种方式交付给你。

证书可能自带SCT:很多CA(特别是自动化的CA,如Let‘s    Encrypt)会在最终签发的证书中嵌入SCT。这是最常见的交付方式。你拿到证书文件,里面就已经包含了SCT。在这种情况下,你的部署流程基本不受影响,只需要像往常一样配置证书即可。

2.    运维与部署环节的影响

这是最需要注意的地方。作为网站部署者,你需要确保最终用户浏览器在访问你的网站时,能够获得证书对应的SCT。主要有三种方式:

方式A:X.509v3证书扩展(最常用,推荐)

做法:CA将SCT直接嵌入到签发的证书文件中。

影响:对部署者来说,这是最无感的方式。你只需要像往常一样安装CA给你的证书文件即可。浏览器拿到证书后,直接从证书扩展里读取SCT。

方式B:OCSP    Stapling(在线证书状态协议装订)的扩展

做法:你的Web服务器(如Nginx,Apache)在TLS握手时,除了提供证书,还会从CA那里定期获取一个带时间戳的、经过签装的SCT列表,并“装订”在握手消息中发给浏览器。

影响:这种方式要求你的Web服务器必须正确配置并支持OCSP    Stapling。如果配置不当,浏览器可能无法获得SCT。它的好处是能减少证书嵌入带来的大小开销,但配置复杂度稍高。

方式C:TLS扩展(在握手中单独发送)

做法:在TLS握手过程中,服务器通过一个专门的扩展字段将SCT列表发送给浏览器。

影响:这也需要服务器进行相应的配置支持。相比OCSP    Stapling,这种方式更直接,但也需要确保服务器和网络路径支持。

3.    浏览器兼容性和访问的影响

强制执行:从Chrome    2021年的更新开始,任何没有提供有效SCT的证书都被视为无效,浏览器会阻止访问并显示“不安全”的警告。这意味着如果你的部署方式有误,导致浏览器收不到SCT,你的网站将对相当一部分用户无法访问。

SCT数量要求:浏览器通常要求证书必须从至少两种不同的、受信任的CT日志服务器获取SCT。这是为了防止单个日志服务器出问题导致整个网站不可用。

SCT的新鲜度要求:SCT也有“有效期”。一般来说,SCT必须是在证书签发后的最长10天内生成并嵌入的。过旧的SCT也会被浏览器拒绝。

我总结一下

证书透明度是什么?    一个公开的、防篡改的证书签发日志系统,目的是为了监督CA和发现伪造证书。

它对部署的影响是什么?

                1.        默认无感:对于绝大多数使用主流CA、采用标准部署流程的用户来说,CA已经帮你搞定了最核心的SCT嵌入工作,你的部署方式无需改变。

                2.        配置需谨慎:如果你使用的是自签名证书、内网CA签发的证书(这些不被公共CT日志接受),或者你依赖于OCSP    Stapling等高级方式传递SCT,那么你必须仔细检查服务器配置,确保浏览器在TLS握手时能获得有效的SCT。否则,你的网站将在主流浏览器中无法访问。

                3.        安全性的提升:虽然增加了部署的一点复杂性,但它极大地提升了整个HTTPS生态系统的安全性,让你和你的用户更难受到中间人攻击的威胁。