证书链工作原理

颁发

证书发放

如果用户想得到一份属于自己的证书,他应先向 CA 提出申请。在 CA 判明申请者的身份后,便为他分配一个公钥,并且 CA 将该公钥与申请者的身份信息绑在一起,并为之签名后,便形成证书发给申请者。
如果一个用户想鉴别另一个证书的真伪,他就用签发那个证书CA 的公钥对那个证书上的签字进行验证,一旦验证通过,该证书就被认为是有效的。

根认证机构的构建
  1. 根认证机构「CA」生成公钥 ca_KeyPub 和私钥 ca_KeyPri,以及基本信息表 ca_Info。ca_Info 中一般包含了「CA」的名称、证书的有效期等信息。

  2. 根认证机构「CA」对(ca_KeyPub + ca_Info)进行散列运算,得到散列值 ca_Hash。

  3. 根认证机构「CA」使用其私钥 ca_KeyPri 对 ca_Hash 进行非对称加密,得到加密的散列值 enc_ca_Hash。

  4. 根认证机构「CA」将(ca_KeyPub + ca_Info + enc_ca_Hash)组合生成自签名的数字证书「ca_Cert」。这张证书称之为根证书,也就是说根证书实质上是一个自签名的证书。

根证书「ca_Cert」包含的内容:ca_KeyPub + ca_Info + enc_ca_Hash。

单级认证机构是签名是由根证书签名的,二级认证机构是证书是由中间证书签名的。因此只介绍下二级和多级认证机构的构建。

二级(或以上)认证机构的构建
  1. 二级认证机构「CA2」生成公钥 ca2_KeyPub 和私钥 ca2_KeyPri,以及基本信息表 ca2_Info。ca2_Info 中一般包含了「CA2」的名称、证书要求的有效期、证书功能扩展等信息。

  2. 二级认证机构「CA2」将 ca2_KeyPub、ca2_Info 送给根认证机构「CA」。

  3. 根认证机构「CA」通过某种方式验证「CA2」的身份之后,再加上根认证机构自己的一些信息 ca_Info(Issuer,AKI),然后对它们(ca2_KeyPub + ca2_Info + ca_Info)进行散列运算,得到散列值 ca2_Hash。

  4. 根认证机构「CA」使用其私钥 ca_KeyPri 对 ca2_Hash 进行非对称加密,得到加密的散列值 enc_ca2_Hash。

  5. 根认证机构「CA」将(ca2_KeyPub + ca2_Info + ca_Info + enc_ca2_Hash)组合签署成数字证书「ca2_Cert」并回送给「CA2」。

二级认证机构证书「ca2_Cert」包含的内容:ca2_KeyPub + ca2_Info + ca_Info + enc_ca2_Hash。

「ca2_Cert」可用于签署下一级的证书。

二级(或以上)认证机构的证书签署
  1. 服务器「S2」生成公钥 s2_KeyPub 和私钥 s2_KeyPri,以及基本信息表 s2_Info。s2_Info 中一般包含了「S2」的名称、证书要求的有效期等信息。

  2. 服务器「S2」将 s2_KeyPub、s2_Info 送给二级认证机构「CA2」。

  3. 二级认证机构「CA2」通过某种方式验证「S2」的身份之后,再加上根认证机构自己的一些信息 ca2_Info,然后对它们(s2_KeyPub + s2_Info + ca2_Info)进行散列运算,得到散列值 s2_Hash。
    二级认证机构「CA2」使用其私钥 ca2_KeyPri 对 s2_Hash 进行非对称加密,得到加密的散列值 enc_s2_Hash。

  4. 二级认证机构「CA2」将(s2_KeyPub + s2_Info + ca2_Info + enc_s2_Hash)组合签署成数字证书「s2_Cert」并回送给「S2」。

  5. 服务器证书「s2_Cert」包含的内容:s2_KeyPub + s2_Info + ca2_Info + enc_s2_Hash。

「s2_Cert」不可用于签署下一级的证书。

从上面可以看出,证书签署的流程是:「ca_Cert」-> 「ca2_Cert」->「s2_Cert」。它是一条完整的链条,我们把它称之为 「证书链」。

验证

收方在收到信息后用如下的步骤验证您的签名:

  1. 使用自己的私钥将信息转为明文;

  2. 使用发信方的公钥从数字签名部分得到原摘要;

  3. 收方对您所发送的源信息进行hash运算,也产生一个摘要;

  4. 收方比较两个摘要,如果两者相同,则可以证明信息签名者的身份。

如果两摘要内容不符,会说明什么原因呢?

可能对摘要进行签名所用的私钥不是签名者的私钥,这就表明信息的签名者不可信;也可能收到的信息根本就不是签名者发送的信息,信息在传输过程中已经遭到破坏或篡改。

作用:

  1. 保密性 - 只有收件人才能阅读信息。

  2. 认证性 - 确认信息发送者的身份。

  3. 完整性 - 信息在传递过程中不会被篡改。

  4. 不可抵赖性 - 发送者不能否认已发送的信息。

单级认证机构的验证

(假设根认证机构「CA」的根证书「ca_Cert」已经安装到操作系统中且被信任。下同。)

  1. 服务器「S」下发证书「s_Cert」给客户端「C」。

  2. 客户端「C」检查到「s_Cert」中的 ca_Info,发现它是由「CA」签署的。

  3. 客户端「C」取出「ca_Cert」中的 ca_KeyPub,对「s_Cert」中的 enc_s_Hash 进行解密得到 s_Hash。

  4. 客户端「C」对「s_Cert」中的(s_KeyPub + s_Info + ca_Info)进行散列运算,得到散列值 s_Hash_tmp。

  5. 客户端「C」判断 s_Hash 和 s_Hash_tmp 是否相等。如果两者相等,则证明「s_Cert」是由「ca_Cert」签署的。

  6. 客户端「C」检查「ca_Cert」,发现该证书是根证书,且已经被系统信任,身份验证通过。

二级(或以上)认证机构的验证
  1. 服务器「S2」下发证书「s2_Cert」、「ca2_Cert」给客户端「C」。

  2. 客户端「C」检查到「s2_Cert」中的 ca2_Info,发现它是由「CA2」签署的。

  3. 客户端「C」取出「ca2_Cert」中的 ca2_KeyPub,对「s2_Cert」中的 enc_s2_Hash 进行解密得到 s2_Hash。

  4. 客户端「C」对「s2_Cert」中的(s2_KeyPub + s2_Info + ca2_Info)进行散列运算,得到散列值 s2_Hash_tmp。

  5. 客户端「C」判断 s2_Hash 和 s2_Hash_tmp 是否相等。如果两者相等,则证明「s2_Cert」是由「ca2_Cert」签署的。

  6. 客户端「C」检查到「ca2_Cert」中的 ca_Info,发现它是由「CA」签署的。

  7. 客户端「C」取出「ca_Cert」中的 ca_KeyPub,对「ca2_Cert」中的 enc_ca2_Hash 进行解密得到 ca2_Hash。

  8. 客户端「C」对「ca2_Cert」中的(ca2_KeyPub + ca2_Info + ca_Info)进行散列运算,得到散列值 ca2_Hash_tmp。

  9. 客户端「C」判断 ca2_Hash 和 ca2_Hash_tmp 是否相等。如果两者相等,证明「ca2_Cert」是由「ca_Cert」签署的。

  10. 客户端「C」检查「ca_Cert」,发现该证书是根证书,且已经被系统信任,身份验证通过。

  • 8
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值