打印
[通信技术资料]

终于搞懂了RSA数字证书的验签,真不容易!

[复制链接]
1844|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
LIKOU|  楼主 | 2021-12-30 00:24 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 LIKOU 于 2021-12-30 17:39 编辑

#申请原创#@21ic小管家
终于搞懂了数字证书验签,真不容易!
  最近,一直在研究RSA数字证书,但是对于RSA数字证书验签始终搞不明白,网上帖子一大堆没有一个实例讲解的。万事开头难,还是得靠自己,反复看了几遍《图解密码技术》RSA数字签名和证书的相关章节,终于有所收获,自己抓包、获取数字证书等等,最后终于亲身实践了一把,大获成功。给二姨家的小伙伴们介绍一下,好东西还是要分享的,分享使我快乐,哈哈。
  了解HTTPS通信协议的小伙伴应该都知道,在TLS握手协议的的certificate阶段,服务器会把自己的数字证书发送给客户端,然后客户端验证该数字证书。但是,当我们获取到这个数字证书后怎么看懂,又该如何人工验签本文我们以百度的数字证书来介绍这两点。
首先抓取登录百度的数据包,见图1,可以看到,数据包中包含百度的证书和给百度颁发数字证书的上级CA证书。

1 抓取登录百度的数据包
  把两个证书提取出来,见图2


2 百度的证书和给百度颁发数字证书的上级CA证书
  数字证书中有很多信息,比如版本、序列号、签名算法、签名哈希算法等,这里针对数字证书的验签,我们以百度证书为例,介绍重点需要关注的几个参数:
1.签名算法
  这个签名算法是指上级CA给百度的数字证书签名时使用的签名算法,为sha256RSA简单理解就是先对百度证书用sha256哈希算法计算出数字摘要,然后使用上级CA的私钥对这个数字摘要进行RSA算法签名。
  那么反过来,当客户端收到证书后,就可以使用该签名算法和公钥来验证该签名。使用上级CA公钥和签名算法解密签名,这时候得到的是数字摘要A,然后再通过sha256哈希算法来对证书进行计算,计算出的数字摘要B和通过上级CA公钥解密的数字摘要A进行对比。如果对比结果一致,说明百度证书没有被篡改,是可信的
2.上级CA公钥
  每张数字证书都包含自己的公钥,这里我们需要的是上级CA的公钥,从图2中提取上级CA的证书中公钥的参数:
3082010a0282010100c70e6c3f23937fcc70a59d20c30e533f7ec04ec29849ca47d523ef03348574c8a3022e465c0b7dc9889d4f8bf0f89c6c8c5535dbbff2b3eafbe356e74a46d91322ca36d59bc1a8e3964393f20cbce6f9e6e899c86348787f5736691a191d5ad1d47dc29cd47fe18012ae7aea88ea57d8ca0a0a3a1249a262197a0d24f737ebb473927b05239b12b5ceeb29dfa41402b901a5d4a69c436488def87efee3f51ee5fedca3a8e46631d94c25e918b9895909aee99d1c6d370f4a1e352028e2afd4218b01c445ad6e2b63ab926b610a4d20ed73ba7ccefe16b5db9f80f0d68b6cd908794a4f7865da92bcbe35f9b3c4f927804eff9652e60220e10773e95d2bbdb2f10203010001
这里需要明确一点,这个公钥参数包含模数nc70e……b2f1和指数e010001
  因为上级CA对百度的数字证书签名,是对整个百度数字证书进行的签名,即百度的数字证书包含证书和签名值两部分。由于百度证书的编码格式为ASN.1,所以要获取百度证书的数据和签名值这两个数据需要使用ASN.1 Editor软件打开百度证书,百度证书的数据,见图3


3 百度证书的数据
  签名值,见图4


4 签名值
  最后,将上级CA的公钥模数n、公钥指数e、百度证书的数据、签名值依次填入RSA验签工具(因软件版权问题,这里不提供,可自行搜索或开发),选择哈希签名算法为sha256,即可验证成功,见图5

5 RSA证书验签
  验证成功了,真心不容易啊!真是应了那句话“冷暖自知,悲喜自渡!万般滋味,皆是生活”,不论是生活还是工作,探索未知和追逐理想的过程总是困苦的,但只要心里充满对知识的渴望,就会一直学习、一直努力、一直向前!

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

7

主题

33

帖子

1

粉丝