总结证书CT:证书透明度

浪子不回头ぞ 提交于 2020-03-09 19:03:46

证书部分,从服务器生成CSR证书请求文件开始,利用CSR生成自签名证书,然后开始校验,顺着证书链校验服务器身份,签名值,根证书等信息。签名值和根证书校验成功,只能表明该服务器证书是由某一个CA机构所签发的,之后还要校验证书是否已被吊销,可以从CRL校验或者OCSP校验两方面实现。除了OCSP校验是要向OCSP服务提供方进行请求校验外,其他如根证书校验或CRL校验,都是通过CA机构进行,作为校验的基础,或者说是信任的基础,浏览器会信任CA机构和OCSP服务提供商(否则校验也没办法进行),但是这会出现一个什么问题呢,如果CA机构在为服务器签发证书时错误验证服务器实体的身份,签发了一张不安全的证书,或者有人冒充某一个服务器实体去申请签发证书,如果CA机构没有正确验证身份后签发了一张证书,可能会让客户端错误地信任了某一服务器。

对于客户端来说,数字签名技术完成证书校验后,只能证明这个服务器证书确实是由某CA机构签发的,但不能保证它是一张正确的证书,如果这张证书是由别人冒充服务器身份申请的,那么接下来客户端和服务器进行通信,就等于是和冒充者进行通信,还记得中间方攻击吗?以上问题出现的原因,有CA机构自己的问题(签发过程出现身份校验问题),还有一个很重要的就是客户端(浏览器)对CA机构的信任。

 

证书透明度三个组件

针对上面的问题,证书透明度机制可以很好地解决,Certificate Transparency可以让CA机构,服务器实体和客户端都能看到证书的签发和使用过程,这样的三方面监视,可以大大减少证书的错误签发。它是怎么做到的?先来看看证书透明度机制的三个组成部分:证书日志,监视器和审计。

Certificate Logs证书日志

证书日志保存了所有证书的签发记录,在CA机构签发证书期间提交,保存在互联网服务器中,所以像前面的OCSP一样是一种网络服务,采用密码保护。对于CA机构,服务器实体两者都可以向Certificate Logs提交证书签发日志,提交后,Certificate Logs会返回一个SCT(Signed Certificate Timestamp)证书签名时间戳,表示该证书经过审计了,之后,监视器Monitors就可以对这张证书进行监视,客户端(浏览器)需要在TLS/SSL握手阶段向服务器获取SCT信息。

总的来说,Certificate Logs证书日志相当于一个数据库,里面保存了所有的证书签发记录,且任何人都可以查询。证书日志只能往里面新增记录,不能删除。

Monitors监视器

Monitors监视器,顾名思义就是一个监控服务,有了证书日志后,监视器就可以基于其来进行证书的监控操作,查询某一张证书是否合法,还能检测证书的扩展项。监视器会定期去查询所有证书日志服务器中的证书,对于使用Monitors监视器的服务器来说,如果其域名对于的证书被CA机构签发后,服务器能通过Monitors收到通知,这样监视的好处是,如果服务器发现自己的域名突然被别人申请了证书,即发现有冒充者伪造证书,即可快速与CA机构联系,撤销非法的证书。

Auditors审计

最后一个组件是Auditors审计,从上面的组件关系图可以看到,它通常处于客户端中,审计作用是什么呢?就是验证证书是否在证书日志中,是否符合证书透明度CT机制,在与服务器握手阶段,校验服务器证书中是否包含有SCT信息,SCT上面说了,相当于一张证明,证明该证书符合CT机制,是安全的,如果无法获取到SCT信息,那么可能证书存在错误签发的情况,有可能是一张“假冒”证书,通常在浏览器上我们会看到提示说这是具有可以证书的网站,就是这个原因。

 

证书扩展获取SCT

SCT信息在CA机构签发证书过程中向Certificate Logs证书日志网络服务提交证书记录,也可以由服务器提交证书记录,都会返回得到SCT证书签名时间戳信息,客户端(浏览器)获取SCT信息的作用相当于一种校验,校验该服务器证书支持CT证书透明度机制。在CA机构签发服务器证书时,向Certificate Logs提交证书记录后,得到SCT信息,再把它放在证书扩展中,因此,浏览器在访问服务器时就可以直接从证书中获取到SCT信息,例如我们打开一个网站的证书:

可以看到,Log ID有三个,没错,一张证书可以有多个证书日志服务商,一般来说也是这样的,CA机构或者服务器会向多个Certificate Logs提交证书记录,这样如果未来某一个Certificate Logs服务不可用了,那么该证书还可以由其他证书日志监控。

 

总结CT机制运作过程

最后来总结一下证书透明度机制的大致运作过程:

  1. 证书签发阶段:CA提交证书签发记录给Certificate Logs,并获取SCT,然后将SCT信息整合到SSL证书扩张中,最后向服务器颁发证书。
  2. TLS/SSL握手阶段:客户端(浏览器)校验服务器的身份,获取服务器证书和SCT信息,校验证书链证实证书有效,校验SCT签名信息证实该证书符合证书透明度机制。如果SCT信息校验不通过,客户端可以选择拒绝该证书。
  3. 证书监控阶段:Monitors监视器基于Certificate Logs服务进行证书监控,定期查询证书是否未授权或者是否合法。

审计阶段:在客户端处通常由浏览器来完成,任务是在握手阶段,负责校验SCT信息,如果某一证书SCT校验不通过,那么该证书可能是非法的。

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!