在双钥体系中,公钥用来加密信息,私钥用来数字签名。
数字签名
RSA 加密保障了信息的机密性
,但无法保证信息的完整性
数字签名是利用了私钥加密信息摘要, 信息摘要可以保证数据的完整性
,私钥可以对发送者信息证明,(相当于发送者在文件上签名了一样,所以叫数字签名)
但其中还有一个问题,就是无法保证公钥的来源性是否正确
比如如下一个问题:
a 生成一对公私钥并把公钥发给b, 随后a就可以用自己的私钥发送信息给b, b用手中的公钥解密信息即可, 但假如有c在b的电脑上替换b的公钥为c自己的公钥, 那么c就可以用私钥伪造a发送信息给b, 因为b无法验证公钥是否来自a还是来自c, 那么就会导致b误认为c发过来的信息和之前一样还是a发送给他的
公私钥就跟是钥匙和锁一样总是成对而且是唯一的,a生产锁和钥匙,把钥匙给你,你用这把锁去开门,如果可以开对,那么就证明这把锁是a的, c如果要伪造一把锁是不可能的,但如果c把你的钥匙和锁都换成他自己的,那么你用c的钥匙开c的锁,自然是可以打开的,但此时锁却不是a的
数字证书
数字证书就是为了解决这个公钥的来源问题
a 把自己的公钥给第三方权威机构CA, 然后CA为a制作了一张包含a的公钥和a的个人信息的数字证书, 下次a想给b发文件,只需要把该文件, 文件的数字签名,文件的数字证书都交给b, b从CA获取CA的公钥解密数字证书,就可以得到a的公钥和a的信息,然后再用a的公钥验证数字签名。
在这个过程中, b获取公钥是从CA获取到的,而不是b给他的,而且CA证书是定期会失效的,CA证书信息还包含权威机构的认证信息,别人是伪造不了的。
SSL
ssl 是https协议给http外加的一层隧道协议
这个协议主要用于网页加密。客户端向服务器发出加密请求。服务器用自己的私钥加密网页以后,连同本身的数字证书,一起发送给客户端。
客户端(浏览器)中会有一个证书管理器, 有"受信任的根证书颁发机构"列表。客户端会根据这张列表,查看解开数字证书的公钥是否在列表之内。
如果浏览器发现用户正在浏览的网址和数字证书中的网址不一致,那么浏览器就会发出如下警告:
如果这张数字证书不是由受信任的机构颁发的,那么浏览器发出警告为:
参考:
https://www.zhihu.com/question/52493697
http://www.ruanyifeng.com/blog/2011/08/what_is_a_digital_signature.html