一、私钥与公钥
1、老的加密方式
1)加密流程
- A有两把钥匙:公钥和私钥
- A会提前把自己的公钥给到B、C、D
- B—>A写信:B用公钥将信件加密;A收到后用私钥解密,获取信件的内容
- A—>B回信(用数字签名的方式):信件内容通过hash生成摘要(digest),使用私钥,对这个摘要加密,生成"数字签名"(signature);将信件+“数字签名"(signature)一起发送给B。
- B收到信件:先用A的公钥对“数字签名"(signature)解密生成摘要(digest);再将信件hash得到摘要2,两个摘要进行比对,如果一致说明信件内容未被篡改。
2)风险
- B中保存的A的公钥信息可以被篡改。则有人可以模拟A跟B进行通信
2、新的加密方式(加入了数字证书验证流程)
1)加密流程
- A有两把钥匙:公钥和私钥
- A去找"证书中心"(certificate authority,简称CA),为公钥做认证。证书中心用自己的私钥,对鲍勃的公钥和一些相关信息一起加密,生成"数字证书"(Digital Certificate)
- A—>B写信:信件内容通过hash生成摘要(digest),使用私钥,对这个摘要加密,生成"数字签名"(signature);将信件+“数字签名"(signature)+ 数字证书一起发送给B。
- B收到信件:先用CA的公钥解开数字证书,就可以拿到A真实的公钥和A的相关信息,确认了A的确是A和A的公钥的正确性;然后用A的公钥对“数字签名"(signature)解密生成摘要(digest);再将信件hash得到摘要2,两个摘要进行比对,如果一致说明信件内容未被篡改。
二、https请求流程
HTTPS(Hyper Text Transfer Protocol Secure),是一种基于SSL/TLS的HTTP,所有的HTTP数据都是在SSL/TLS协议封装之上进行传输的。HTTPS协议是在HTTP协议的基础上,添加了SSL/TLS握手以及数据加密传输,也属于应用层协议。所以,研究HTTPS协议原理,最终就是研究SSL/TLS协议。
1、加密算法逻辑
实际上SSL/TLS协议的基本思路是非对称加密和对称加密结合来传输数据(之所以要使用这两种加密方式的原因在于非对称加密计算量较大,如果一直使用非对称加密来传输数据的话,会影响效率)
- HTTPS是通过一次非对称加密算法(如RSA算法)进行了协商密钥的生成与交换
- 然后在后续通信过程中就使用协商密钥进行对称加密通信
2、https通信过程
- 2.1、客户端浏览器发出安全请求(https前缀):包含客户端支持的加密协议及版本、SSL/TLS
- 2.2、服务端给出响应:1、筛选出合适的加密算法与HASH算法。2、返回数字证书(证书中含网站地址,publicKey,以及证书的颁发机构等信息)
- 2.3、客户端获得以上信息后要做以下工作
- 客户端校验数字证书的合法性(根据客户端保存的根证书和是否信任该证书校验)
- 如果证书受信任,或者是用户接受了不受信的证书,浏览器会生成一串随机数的密码,并用证书中提供的publicKey加密,
- 使用约定好的HASH算法计算握手消息,并使用生成的随机数对消息进行加密,最后将之前生成的所有信息发送给网站。
- 2.4、服务端收到客户端的数据之后要做以下操作:
- 服务器用自己的私钥解密得到对称密钥;使用对称密钥解密浏览器发来的握手消息,并验证HASH是否与浏览器发过来的一致
- 使用密码加密一段握手消息,发送给浏览器
- 2.5、浏览器解密并计算握手消息的HASH,如果与服务端发来的HASH一致,此时握手过程结束,之后所有的通信数据将由之前浏览器生成的随机密码并利用对称加密算法进行加密。
- 数字证书的原理:
(1){RSA(hash(message))+message} (message中包含publicKey)(前半部分为数字签名sign)
(2)比对reRSA(sign) == hash(message)
(3)reRSA使用CA的公钥来解密