RSA握手过程
HTTPS采用了公钥加密和对称加密结合的方式进行数据加密和解密
RSA握手是HTTPS连接建立过程中的一个关键步骤,用于确保通信双方的身份验证和生成对称加密所需的密钥
通过RSA握手过程,客户端和服务器可以协商出一个共享的对称密钥,并确保通信双方的身份验证和数据传输的安全性
通过Wireshark
抓包,一共经历了四次握手
TLS第一次握手
- 客户端向服务器发出Client Hello,客户端向服务器发送一个包含
加密套件列表
、随机数
和其他参数的消息,以表示自己支持的加密算法和通信参数 Random随机数
是生成会话秘钥的材料之一
TLS第二次握手
服务器发送ServerHello:服务器从客户端发送的加密套件列表中选择最合适的
加密套件
,并返回给客户端一个包含自己的证书
(包含公钥)、随机数
和其他参数的消息。服务端的密钥套件为:Cipher Suite: TLS_RSA_WITH_AES_128_GCM_SHA256
一般WITH前面有两个算法,这只有RSA,说明密钥交换算法和签名算法都是RSA
握手后使用AES对称算法
随机数是产生会话秘钥的第二个材料
返回给客户端的证书是包含服务器的公钥的,客户端通过CA的公钥来解密获得服务器的公钥
- 数字证书的签发和验证流程
TLS第三次握手
- 客户端生成一个
随机数(pre-master)
,再用服务器的RSA公钥加密该随机数,通过Client key Exchange消息传给服务器 - 因此,客户端,服务器都有了三个随机数,分别是Client Random,Server Random和pre-master
- 双方通过这三个随机数生成
会话秘钥
,用于对后续的HTTP请求响应的加密 - 生成完会话秘钥后,客户端发送change cipher spec消息给服务端,开始使用会话秘钥进行加密通信
- 客户端最后再发Encrypted Handshake Message消息把之前数据做一个摘要处理,使用会话秘钥加密发送给服务器,让服务器做验证
TLS第四次握手
- 服务器也发送一样的消息给客户端,让客户端做验证,如果都没问题,那么握手就完成了,之后就使用会话秘钥进行加密通信了