本文整理了SSL证书的一些知识,主要是对与整个证书链验证原理的介绍,不涉及具体的报文细节
SSL证书内容
SSL证书是通信过程中一方的身份证明,用来发送给通信的另一方来证实自己的身份。其内容主要包括一些与自身相关的信息和与证书相关的信息以及自己的公钥。
CA机构签名过程
CA机构对服务端进行验证后(CA有自己的验证方式,线上或者线下都有),对服务器的明文信息先进行hash,得到摘要,然后用自己的私钥对摘要进行加密,得到数字签名。将签名和证书一起发放给服务器。
证书链
现实中不可能所有的证书都是由少数几个CA签发的,那样CA就太忙了。因此产生了证书链,根CA发布证书给中间CA,中间CA再发布证书给各个服务器。验证的时候,从下往上,最终验证到根CA。
验证过程
假设有两个中间CA,CA1和CA2,整个证书链如下所示
根CA -》CA1 -》CA2 -》 服务器
那么此时,服务器发给客户端的证书链中不仅包含自己的证书,还要包含各个中间CA的证书,本例子中也即CA1和CA2以及服务器自己的证书。 客户端首先验证 CA2 ->服务器 这一环,分为以下步骤:
- 从CA2的证书中,拿出CA2的公钥,对服务器证书中的CA2的签名进行解密。
- 对服务器证书中的明文信息进行hash,使用的hash算法与CA2所使用的hash算法一致。
- 对比前两步的结果,看其是否相等,若相等则验证通过。
验证通过后,客户端继续验证证书链的下一个环节,即 CA1 -> CA2 ,与上一个环节大同小异,分为以下步骤:
- 从CA1的证书中,拿出CA1的公钥,对CA2证书中的CA1的签名进行解密。
- 对CA2证书中的明文信息进行hash,使用的hash算法与CA1所使用的hash算法一致。
- 对比前两步的结果,看其是否相等,若相等则验证通过。
验证通过后,客户端继续验证证书链的最后一个环节,即 根CA -> CA1 ,注意第一步的不同之处:
- 从自己本地的缓存中,拿出根CA的公钥,对CA1证书中的根CA的签名进行解密。
- 对CA1证书中的明文信息进行hash,使用的hash算法与根CA所使用的hash算法一致。
- 对比前两步的结果,看其是否相等,若相等则验证通过。
至此证书验证过程结束。客户端本地会缓存一些少量的,全球都认可的根CA的证书,根CA的证书是自签名的,其中也会包含根CA的公钥。
无论有多少中间CA(零个或者多个),只要沿着证书链进行验证,每一个环节都验证通过的话,服务器就是可信的。其中有一个环节验证不通过,服务器就是不可信的。
关于SSL协议以及SSL证书还有很多内容,以后随着学习慢慢补充。
|