启用 SSL 的 Certificate Transparency 策略

Certificate Transparency 是什么?

HTTPS 网站的身份认证是通过证书信任链完成的,浏览器从站点证书开始递归校验父证书,直至出现信任的根证书(根证书列表一般内置于操作系统,Firefox 则自己维护)。然而,受信任的 CA(证书颁发机构)有好几百个,他们成为整个网站身份认证过程中一个较大的攻击面。实际上,目前由于 CA 失误导致错误签发证书;以及个别 CA 出于某些目的(如监控加密流量)故意向第三方随意签发证书这两种情况时有发生。

无论是 CA 无意或有意签发出来的「非法证书」,都能通过目前的证书链校验机制的验证。这些 CA 签发的「非法证书」相比自签名的「无效证书」,更难被发现,即使被发现依靠现有机制也很难快速消除影响。

另外,域名所有者的管理不善也可能导致域名配置被第三方控制,从而第三方能够向 CA 申请你网站的证书(特别是 DV 类型的证书)。这种情况,发现和处理同样很麻烦。

Certificate Transparency 就是为了解决这些问题诞生的,它可以直译为证书透明度,由 Google 主导,并由 IETF 标准化为 RFC 6962。Certificate Transparency 的目标是提供一个开放的审计和监控系统,可以让任何域名所有者或者 CA 确定证书是否被错误签发或者被恶意使用,从而提高 HTTPS 网站的安全性。

Certificate Transparency 整套系统由三部分组成:1)Certificate Logs;2)Certificate Monitors;3)Certificate Auditors。完整的工作原理可以看官方文档:How Certificate Transparency Works

简单说来,证书所有者或者 CA 都可以主动向 Certificate Logs 服务器提交证书,所有证书记录都会接受审计和监控。支持 CT 的浏览器(目前只有 Chrome)会根据 Certificate Logs 中证书状态,作出不同的反应。CT 不是要替换现有的 CA 设施,而是做为补充,使之更透明、更实时。

Certificate Logs 服务器由 Google 或 CA 部署,这个页面列举了目前已知的服务器。合法的证书提交到 CT Logs 服务器之后,服务器会返回 signed certificate timestamp(SCT),要启用 CT 就必须用到 SCT 信息。

以上抄录自[Certificate Transparency 那些事](https://imququ.com/post/certificate-transparency.html “Certificate Transparency),更详细的内容可以直接过去看,这里纪录一下怎么部署,我当然参考了Chakhsu Lau用最简单的方法啦……

提交我们的证书

直接 点击这里 提交即可

提交完毕会生成一个 zip 文件,下载后,把里面的文件放到服务器的某个文件夹,比如/your/path/to/scts

编译 Nginx,加入 CT 模块

要让 Nginx 支持发送 signed_certificate_timestamp 这个 TLS 扩展,需要加入 nginx-ct 这个模块。nginx-ct 需要与 OpenSSL 1.0.2+ 或者 BoringSSL 4fac72e+ 一起编译,不支持 LibreSSL。

1
2
wget -O nginx-ct.zip -c https://github.com/grahamedgecombe/nginx-ct/archive/v1.0.0.zip
unzip nginx-ct.zip

然后在编译 nginx 的时候在 configure 指定一下路径

1
--add-module=../nginx-ct-1.0.0

更新完成 nginx 之后,在配置文件加上

1
2
ssl_ct   on;
ssl_ct_static_scts /your/path/to/scts;

重启 nginx 试试看成功没有

已经显示了 服务器已提供有效的 Certificate Transparency 信息。


启用 SSL 的 Certificate Transparency 策略
https://cuojue.org/read/ssl-certificate-transparency.html
作者
WeiCN
发布于
2016年4月2日
许可协议