前言
本文把数字签名、数字证书与RSA加密算法的关系和流程进行了图像化总结,至于为什么需要数字签名和数字证书请阅读下方参考文章。需要了解RSA加密算法的朋友,请移步:非对称加密算法RSA。
数字签名
从上图我们可以知道,数字签名就是对明文的摘要进行加密的结果。
注意,数字签名这个概念是私钥拥有者才有的。私钥理论上只有一个人拥有,而公钥可能是很多人都拥有。签名的概念就是每个人都不一样,而公钥拥有者对相同明文的摘要加密结果是相同的,所以也就没有数字签名的概念了。
这里并没有直接对明文进行加密,所以是可能被截获并且读取的,暂时先不管,如果有时间,我会在后面的HTTPS的总结中讲。阮一峰老师的文章里在第五步之前都是对明文加密的,而从第五步开始是对摘要进行加密,而他没有在文章中明确指出,这导致我刚开始接触这方面的时候始终无法理解。
数字证书
数字签名只能保证在公钥可靠的情况下,消息是可靠的,那么如何保证公钥可靠呢?
这里的CA就是证书中心(certificate authority),证书中心将公钥和其他信息进行加密的结果就是数字证书,消息在发送时,除了需要明文、签名之外,还需要附带数字证书。因为只有数字证书里的公钥才能保证一定是发送者的公钥,而不是被掉包的公钥。
上图就是一些受浏览器信任的根证书中心。
在拿到数字证书之后,浏览器会验证证书中心的可靠性,其实这和验证消息的可靠性一样,需要第三方机构,但是证书中心已经是第三方了,所以我们其实陷入了验证循环。为了解决这个问题,根证书中心其实是自验证的,也就是你无法验证根证书中心。如果根证书中心都出问题了,那某个网站的公钥是不是正确的已经不值一提了。
上图就是根证书中心给自己颁发的证书,所以说根证书中心是自认证的,也就是无法验证的。
上图是CSDN的证书,由第三方CA进行认证,在详细信息里就有包括CSDN的RSA公钥等信息。
所以这里就产生了一个链:
数字证书的存在其实是为了证明你所拥有的公钥的可靠性。
后记
所以数字证书和数字签名就确保了消息的可靠性,但是并不保证消息不被截获偷窥。当然可以直接对明文进行RSA加密,但是一般没人这么做,因为RSA是很耗性能的。