Https通信采用非对称、对称两种加密算法。
1.在首次请求建立连接时采用非对称算法加密,客户端向服务端发起请求。
2.服务端响应后携带CA证书发给客户端。
3.客户端通过本地信任的CA证书机构解密验证证书的合法性,如果不合法则报警不通过,
如果通过
1.客户端生成一个随机数。
2.使用公钥对随机数进行加密发送给服务器。
3.服务器对客户端发来的内容用私钥解密,解密成功后使用对称算法进行加密,返回给客户端。
之后双方的数据交互就使用这个随机数进行加密解密。
Charles 中间人机制
通过作为客户端的代理拦截客户端的请求处理后发送给服务端,进行通信。
- Charles向服务端发起请求,服务器携带CA证书返回给Charles,用公钥进行解密获得CA证书公钥
- Charles伪造一个CA证书,冒充服务器把这个伪造的证书传给客户端,客户端用公钥进行解密获得CA证书公钥(这也是为什么要抓取https包的时候要先安装一个证书)
- 客户端解密成功后通过对称算法生成秘钥,再通过解密出来的公钥进行加密发送给服务端
- Charles截取后通过伪造证书的私钥进行解密获得https通信要使用对称秘钥。
- Charles使用服务器真正的公钥对对称秘钥进行加密后发送给服务器。
- 服务器使用私钥解密成功,获得信任建立连接,开始通信。
- 服务器使用对称秘钥对传送数据进行加密发送给客户端
- Charles使用对称秘钥解密收到的密文,获得明文,然后再次加密,发送给客户端。
- 客户端再次使用对称秘钥加密要发送的数据,Charles获取、解密、加密后发送给服务器。