背景
抓包分析
- 选择使用的网卡,设置捕捉过滤器host blog.csdn.net (也可以不设置,抓包后通过显示过滤器查看),开始抓取。
2. 使用curl https://blog.csdn.net/u010648018/article/details/103447167发起一次https请求
3. 可以看到,首先是tcp的三次握手,然后是tls协商加密算法与密钥交换过程
4. Client Hello,客户端向服务端发送一个随机数和支持的加密算法
5. Server Hello,服务端向客户端发送随机数和选择的加密算法(ECDHE)
- Certificate, Server Key Exchange, Server Hello Done
- Certificate 服务端向客户端发送证书链。证书用于身份认证,其中包含服务端公钥PubKey
- Server Key Exchange 根据上面具体选择的加密算法(ECDHE)准备生成密钥需要的一些参数(premaster)。(RSA算法没有该步骤)
- Server Hello Done 表明服务端的Hello消息发送完毕
- Client Key Exchange, Change Cipher Spec, Encrypted Handshake Message
- Client Key Exchange 在验证服务端发送证书可信后,生成加密算法所需的一些参数
- Change Cipher Spec 告诉服务端以后要使用选择的加密算法加密数据
- Encrypted Handshake Message 根据之前客户端和服务端生成的随机数、加密算法所需的一些参数生成会话密钥key,对之前的握手消息的Hash值和Mac值进行加密,来验证该加密密钥是否可用。服务端以相同的方法生成会话密钥解密该消息,校验其中的Hash值和Mac值。
- Change Cipher Spec, Encrypted Handshake Message
- Change Cipher Spec 告诉客户端以后要使用该加密算法来加密数据
- Encrypted Handshake Message 使用会话密钥key加密之前的握手消息的Hash值和Mac值,发送给客户端校验
9. 双方校验完成,发送加密的应用数据
整体流程
閱讀更多 爪哇生活 的文章