- 数字签名+数字证书现的原理
1
将报文按双方约定的HASH算法计算得到一个固定位数的报文摘要。
在数学上保证,只要改动报文中任何一位,重新计算出的报文摘要值就会与原先的值不相符。这样就保证了报文的不可更改性。
2
将该发送方报文摘要值用发送方的私人密钥加密(即为数字签名),然后连同原报文和数字证书一起发送给接收者。
3
证书中心(CA)用自己的私钥,对鲍勃的公钥和一些相关信息一起加密,生成"数字证书"(Digital Certificate)。
接收方收到消息后,使用CA的公钥解开数字证书,确定公钥是否真的属于此发送方,若是,则继续
4
接下来,接收方取下数字签名,使用发送方的公钥进行解密,获取发送方报文摘要值,如果获取失败,则说明此报文不是该发送方发出的;如果获取成功,则继续
5
接收方取下原报文,对原报文使用HASH算法得到接收方报文摘要值,与发送方报文摘要值相比较,如相等则说明报文未被修改过
- 以HTTPS为例进行讲解
1
客户端向服务器发送HTTPS请求
2
服务器用自己的私钥加密网页以后,连同本身的数字证书,一起发送给客户端。
3
客户端(浏览器)的"证书管理器",有"受信任的根证书颁发机构"列表。客户端会根据这张列表,查看解开数字证书的公钥是否在列表之内。
4
如果数字证书记载的网址,与你正在浏览的网址不一致,就说明这张证书可能被冒用,浏览器会发出警告
如果这张数字证书不是由受信任的机构颁发的,浏览器会发出另一种警告
5
如果数字证书是可靠的,那么就生成一个随机密码。然后用证书对该随机密码进行加密
接下来的两步为加密流程:
6
客户端向服务器请求到CA证书,得到证书后,会由公钥产生一段随机密码,由该随机密码加密我们客户端的请求,并且发送加密后的请求和加密随机密码(如果不加密,中间人获取到该随机密码后仍然可以破解我们的加密请求;使用服务端公钥加密该随机密码)。
7
服务器拿到我们加密请求与加密的随机密码,找到与公钥对应的私钥,对加密的随机密码进行解密,得到随机密码
使用随机密码对请求解密,进行业务逻辑处理
8
请求处理逻辑完毕,生成响应后,使用随机密码进行加密响应,返回到客户端
客户端最后再根据随机密码进行解密,即可获取响应的HTML内容。
总流程如下:
- 参考
https://mp.weixin.qq.com/s/-sf8Jz-98pn_v4JmnS8WHg
https://www.jianshu.com/p/f2533fdbb731
https://blog.youkuaiyun.com/jwaccl/article/details/80953610