CA运作模式-认证与过期吊销

从前面证书链校验可以看到,浏览器校验服务器身份时,需要校验整个信任链,中间证书和服务器证书。中间证书是可以签发服务器证书的,之所以要多出这样一个中间证书,而不是由CA机构直接签发,原因是权威的CA机构数量并不多,如果所有的服务器实体证书都交由权威CA机构签发,当然可以,可是这样CA机构的工作量将非常大,所以CA机构采取授权二级CA机构的方式,让有授权的中间证书(也就是二级CA机构)也可以签发服务器证书,当然校验服务器证书的时候也要校验中间证书,一级一级往上。权威CA机构(即根证书)的授权委派二级机构方式有两种,委派认证和交叉认证。

 

委派认证

事实上,一般情况下权威的CA机构都不会直接签发服务器证书,原因除了上面说的工作量大外,还有,CA机构数量不多,且分布在世界各地,例如中国北京的天威诚信,外国的比较知名的Comodo,GeoTrust和Symantec等,假如一家中国的企业直接向国外的CA机构申请证书,那么一系列提交审核,政策等原因,可能会较繁琐。解决这种问题,国外的权威CA机构可以选择在中国授权委派一个代理商,让这个在中国的代理商负责签发中国企业或机构发来的证书申请文件。这就是委派认证,CA机构需要先向二级机构前发一张委派证书,表示认证该机构,之后该二级机构就可以行使同样的服务器证书签发权力。

二级证书(二级CA机构)还有一个好处就是,如果证书的签名算法进行了更新,那么直接对二级证书进行更新即可,而如果是根证书直接签发的服务器证书,那么如果根证书(也就是CA机构)支持的签名算法进行了更新,需要通知浏览器,更新浏览器集成的CA更证书。委派二级机构的好处就是,直接更新中间证书即可,不需要通知浏览器更新集成的CA根证书,而且CA机构进行版本升级也是很麻烦的。

 

交叉认证

交叉认证,也就是一个根CA机构使用另一个根CA机构的根证书来委派二级机构,为什么要这样做,因为一个新的根CA机构投入使用,需要一些时间来更新身份验证方,也就是浏览器的可信任证书列表,这时如果新的根CA机构想要委派二级机构,签发一张中间证书,可以通过其他已信任的根CA机构,让其进行交叉授权,新的CA机构使用旧的已认证的CA机构证书来交叉签发中间证书,这样的交叉认证方式可以让一个新的根CA机构较快地部署上线提供服务。

 

证书的过期与吊销

CRL证书吊销列表

CRL(Certificate Revocation List)证书吊销列表,包含在了服务器证书中的扩展项CRL分发点,也是服务器实体证明自己身份的一部分,如果服务器证书过期被吊销了,那么身份验证就不通过了。权威的根CA机构会把所有自己签发的,已经吊销的证书集中在一个CRLs文件里,还有被吊销证书的***和被吊销原因(例如过期)等,这里要注意,证书过期了不一定就会立刻吊销,没有过期的证书不一定就是有效的,有可能证书被吊销了。在浏览器校验服务器证书时,除了校验证书是否过期外,还要校验证书的吊销状态,如果证书未过期,但是已被吊销,那么证书无效,身份校验失败。证书被吊销的原因通常就是服务器**泄露,需要及时通知CA机构吊销旧的证书,更换一张新的证书。

      回到CRL,浏览器在校验服务器身份时需要校验证书的过期和吊销状态,就需要找到CRLs文件,所以在服务器证书中会有一项CRL分发点扩展项,保存有CRLs文件的URL地址,浏览器可以根据其找到CRLs文件:

CA运作模式-认证与过期吊销

CRLs文件也是需要安全性保护的,攻击者可以修改CRLs文件,更改了里面的证书吊销状态,让一张不安全的证书被身份校验成功。对CRLs文件的保护使用数字签名技术,使用的私钥和服务器私钥可以一样,也可以不同,在校验时也要校验CRLs文件的签名。

 

CRL校验

CRL校验的步骤大致如下:

  1. 从服务器证书的扩展项中找到CRL分发点,里面包含了CRLs文件的URL,然后下载到本地浏览器。
  2. 客户端使用公钥进行验证,验证完整的证书链。
  3. 浏览器根据X.509 V2标准(HTTPS最常用的标准)来解析CRLs文件,得到ASN.1结构的文件,ASN.1标准是用伪码方式描述结构化证书,这样就能查看到证书的吊销状态。
  4. 校验证书的吊销状态,具体是在ASN.1结构中查看证书的***,然后再CRLs文件中查询该***是否存在,如果是,证明该证书被吊销了。

CRL校验不是必要的,有时浏览器会忽略CRL校验,比如再CRL分发点下载CRLs文件时,耗时过长,浏览器可能会选择放弃检查证书的吊销状态,目的仅仅是为了加快速度,因为在CRL校验过程中,也是会阻塞TLS/SSL握手过程的。

CRL文件结构

最后来简单看一下CRL文件的结构:

CA运作模式-认证与过期吊销

CRLs文件结构类似于证书结构,里面包含了签名值signatureValue和签名算法signatureAlgorithm,tbsCertList结构体中包含的属性就比较多,例如签发日期,吊销列表等:

CA运作模式-认证与过期吊销

版本号version,使用的签名算法signature,CRLs文件签发者issuer和更新时间等都比较容易看出,里面还有一个结构体revokedCertificates标识的就是证书吊销列表,该列表中保存了被吊销的证书***userCertificate,吊销时间revocationDate和可选的扩展香crlEntryExtensions。