对SSL中的【数字证书】的个人理解,颇多不确定之处,望大家帮忙指出不足

先贴几个帖子
基础
https://www.liaoxuefeng.com/wiki/1252599548343744/1304227873816610
https://www.liaoxuefeng.com/wiki/1252599548343744/1304227943022626

具体
https://www.cnblogs.com/fengfengyang/p/9852481.html
https://blog.csdn.net/qq_38265137/article/details/90112705
https://blog.csdn.net/hherima/article/details/52469488
https://baike.baidu.com/item/%E8%AF%81%E4%B9%A6%E9%93%BE/1006625?fr=aladdin
https://www.jianshu.com/p/46e48bc517d0
https://www.liaoxuefeng.com/wiki/1252599548343744/1304227968188450
https://www.liaoxuefeng.com/wiki/1252599548343744/1304227968188450
https://blog.csdn.net/clh604/article/details/22179907

阮一峰老师关于签名与证书的一个例子
http://www.ruanyifeng.com/blog/2011/08/what_is_a_digital_signature.html

按照我的理解:
SSL也遵循公钥加密,私钥解密,私钥加签,公钥验签的步骤。不过其中的后面两句“私钥加签,公钥验签”,仅在SSL握手的时候使用,而且用的私钥是CA证书私钥即证书颁发机构提供给授信服务商的私钥(秘密保存),而用的公钥则是CA证书公钥即证书颁发机构提供给授信服务商的公钥(可以公开)。

按照我的理解:
SSL握手的时候,Client在发出HTTPS之后,从Server那里拿到的证书,里面有一个“签名哈希算法”字段和一个“签名算法”的信息(如下图1所示的sha256),在SSL之后的步骤中应该是用不到的,因为这两个字段是用来给后续非对称加密通信(如果有的话)用的,而SSL中Client在得到Server的公钥之后,便开始协商一个对称密钥,之后便不用进行非对称加密的通信了。

至于这个可能的“非对称加密通信”是如何进行的,我还没有查找相关资料,我的猜测是:

  1. 服务器要发送一段信息 text
  2. 然后利用哈希算法对这段信息进行摘要得到 H = Hash(text) ,其中用到的哈希算法就是“签名哈希算法”这个字段中的算法(如图1中的sha256),或者“签名算法”这个字段中的哈希算法(图1中的“sha256RSA”代表的是“sha256 with RSA”,“with”前的是哈希算法,用来对信息text进行摘要,“with”后的是非对称加密算法,用来对前面生成的摘要进行加密、解密,据我所知除了sha256RSA,还有sha1RSA,sha2RSA,sha1DES等“签名算法”)
  3. 再用CA证书私钥对这个摘要 H 进行加密得到密文 C = Ck(Hash(text)) ,其中用到的加密的算法就是“签名算法”字段中的加密算法(如图1中的RSA)
  4. C 发送给客户端,
  5. 客户端根据CA证书中提示的“签名算法”的非对称加密算法,利用“公钥”字段中的公钥(如图2所示的一大串数字),对 C 进行解密,得到 H’
  6. 对收到的信息 text’ 进行摘要得到 H’’ = Hash(text’),其中用到的哈希算法就是“签名哈希算法”这个字段中的算法(如下图1所示的sha256)。
  7. 对比 H’H’’,如果一致,证明 text’ 没被篡改,如果不一致,证明 text’ 被篡改了。

签名算法和签名哈希算法字段
图1

公钥
图2

以上这个我猜测的“非对称加密”下的验证过程,和阮一峰老师这个例子中“私钥加签,公钥验签”的过程好像有些不一致。
阮老师的例子中,Server在证书中包含一个Server自己生成的公钥k,然后用CA的私钥加密之后发给Client(如图3),Client用CA的公钥解密之后得到公钥k,再拿这个k去验证签名。
而我之前提到的过程中,直接用的CA的私钥对签名进行加密,用CA的公钥对签名进行解密。比阮老师的例子少了一层,即少了Server自己生成的公钥。我也不知道实际使用中,阮老师所谓的Server自己生成的公钥(即图4中“鲍勃的公钥”)保存在证书中的哪里(难道是所谓的“公钥字段”?那个难道不是CA的公钥吗?),所以我认为实际中使用的还是我猜测的方式。
阮老师对CA认证的解释
图3

阮老师对CA认证的解释
图4

但是按照我的理解,其实,阮老师所说的例子应该也能一一对应到实际的使用中。
那就是:
阮老师的表述    实际应用中的表述
“鲍勃的私钥” = “最下层的CA私钥”
“鲍勃的公钥” = “最下层的CA公钥”
“CA的私钥”   = “其上一层的证书的私钥”
“CA的公钥”   = “其上一层的证书的公钥”

下层的证书,由其上一层的证书来提供加密、解密密钥,这层证书再由更上一层的证书来提供加密、解密密钥。
以图5的证书路径为例,具体如下:
为方便描述,这里的三层证书我就用证书 D 、证书 G 、证书 C 来表示。
首先是最下层的证书 C ,它的“公钥”对应的就是阮老师例子中“鲍勃的公钥”。
现在从Server发送证书 C 开始解释,
Server发送证书 C 前,由其上层的证书 G 的颁发机构(某某CA)提供的私钥对 C的所有信息 和G 的所有其他信息(特别是G的指纹信息,后面马上要用到)一起进行非对称加密,得到加密后的证书G’,
再由证书 D(根证书) 的颁发机构(即上面说的某某CA)提供的私钥对上一步得到的G’进行进一步加密,得到一个新的密文D’。
Server把这个密文D’,发给Client,
Client拿到密文D’,用系统提前安装好(一般系统中会提前安装一些可信的根证书)的根证书D对接受到的密文D’进行解密,得到的结果是一个证书G’和密文C’,
对G’进行一个SHA1哈希变换得到一个160bits的字符串,将其与证书G’中的指纹信息对比,如果一致,证明G’没有被修改,
然后再用G’对密文C’进行解密,得到的是一个证书C’’,对C’‘进行一个SHA1哈希变换得到一个160bits的字符串,将其与证书C’‘中的指纹信息对比,如果一致,证明C’'没有被修改,这样,就得到Client发送的一个证书C啦。

在这里插入图片描述
图5

也不知道这样的思路对不对,希望大家帮忙指出问题!感谢。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值