证书链-证书校验

先来打开一个网站的证书链看看:

证书链-证书校验_第1张图片

它的结构是,顶端根证书DigiCert,中间证书GeoTrust RSA CA 2018,和最下级的服务器证书*.csdn.net。为什么会有中间证书?原因上一篇日志说过,由于权威的CA机构数量不多,如果所有的服务器申请证书都将CSR证书请求文件发送到CA机构,那么CA机构的工作量就会非常大,因此CA机构采取授权二级机构的方式来管理证书申请,经授权的二级机构也可以签发服务器证书。CA机构授权使用根证书,签发的二级结构证书,就是中间证书。

 

证书链顺序

回到证书链,在证书认证过程中,由于校验方,通常为浏览器中,继承的是权威CA机构的根证书,因此对于一些经授权的中间证书,浏览器却识别不了(当然也有部分中间证书可以被识别),因此仔部署HTTPS网站时,需要构建正确的证书链,告诉验证方,该服务器证书和它的签署机构,以及根证书(权威CA机构)之间的关系。在证书链中,通常分三级结构,根证书,中间证书和服务器实体证书,正确的证书链顺序中服务器实体证书处在最底端,里面包含了些服务器域名,服务器公钥和签名值等。服务器证书上一级是中间证书,中间证书就是上面提到的由权威CA机构授权的二级机构,可以由它来签发服务器证书。中间证书可以是由多张证书组合在一起,最上级的是根证书,也就是CA机构,对服务器身份进行校验时,需要验证一整个证书链,由于浏览器中集成了权威CA机构的根证书,因此主要是校验中间证书和服务器实体证书的签名值是否正确。

 

信任链

证书链-证书校验_第2张图片

校验服务器身份需要验证整个证书链,从服务器实体证书开始,服务器实体证书的签发者是上一级中间证书的使用者,中间证书的签发者是上一级根证书的使用者。每一级证书都有签名值,根证书使用自己的根CA公钥验证自己的签名,也用来验证中间证书的签名值,中间证书的公钥用来验证下一级的服务器实体证书签名值,以此构成一条信任链。

 

校验信任链

看到每张证书中都有签名值,以及上一级证书的公钥用来验证下一级证书的签名值,可以看出,验证信任链的方式用的是数字签名技术。证书签名方使用自己的私钥对证书进行签名,得到签名值,然后把使用的签名算法和签名值一同放到证书中去,验证方使用签名方的公钥验证签名值,如果验证成功,表明该证书是由签名方签发的。下面来看看证书校验方,也就是浏览器校验证书链的过程,主要是校验中间证书和服务器实体证书的签名值是否正确。

获取证书链

当浏览器访问一个HTTPS网站时,进行身份验证,由服务器发送自己的不包含根证书的完整证书链给浏览器,浏览器首先从服务器实体证书开始验证,查看该域名是不是在证书使用者可选名称扩展SAN扩展中包含的域名,如果包含,验证域名成功,接着是证书的有效期验证,扩展验证,校验服务器实体证书中的服务器公钥,通过查看密钥用法扩展,看这个服务器公钥是否用来进行密钥协商和数字签名。

接下来,校验方通过服务器证书中的CA密钥标识符来获取上一级的中间证书文件,开始中间证书的校验。和服务器证书一样,每一个扩展都由一个critical属性,要验证这个属性的值必须为true,接着进行日期验证,密钥用法扩展。中间证书的公钥除了包含数字签名用法外,还要包括Certificate Sign签名证书用途,CRL Sign证书过期和吊销签署用途。最后校验basic constraints基础约束扩展,检验中间证书是否被允许签发证书。

迭代验证

身份验证方(浏览器),在身份验证时除了验证服务器实体证书,还要验证整条信任链,保证从服务器实体证书开始,服务器证书的签发者是它的上一级中间证书的使用者,中间证书的签发者是它的上一级根证书的使用者。校验信任链的方式是迭代签名验证,使用数字签名技术。从服务器实体证书开始,获取其上一级中间证书的公钥来验证服务器实体证书的签名值,接着再从中间证书的上一级根证书获取的公钥来验证中间证书的签名值,一直迭代下去,由于除根证书外,其他级证书的签发者是其上一级证书的使用者,到达根证书后,根证书的签发者和使用者都是它自己,所以浏览器在进行迭代验证过程中,发现某一证书的签发者和使用者都是自己后,表明找到了根证书,最后验证跟证书时,使用的就是自己的公钥验证自己的签名值,完整整个证书链的验证。

信任锚

信任锚也就是信任的起点,对应的就是根证书,因为身份校验方浏览器集成了权威CA机构的根证书,即信任了根证书,也就是信任了由根证书签发的其他证书。

证书链-证书校验_第3张图片

上图为Windows中集成的根证书。

你可能感兴趣的:(网络工程,证书链,证书校验)