1. HTTP 代理原理

HTTP CONNECT 方法:

客户端正向代理github.comCONNECT 通道已建立正向代理透明地传输流量,包括 TLS 握手消息CONNECT github.com:443建立 TCP 连接TCP 连接建立成功HTTP/1.1 200 Connection Established[TLS 流][GET / HTTP/1.1][Host: github.com][TLS 流][GET / HTTP/1.1][Host: github.com][TLS 流][HTTP/1.1 200 OK][<HTML Page>][TLS 流][HTTP/1.1 200 OK][<HTML Page>]客户端正向代理github.com

2. MITM

Man In The Middle:

mitm.jpg

客户端正向代理github.com1. 信任正向代理的根证书;2. 将正向代理设置为代理正向代理与目标服务器之间的 TLS 连接已建立正向代理冒充被代理服务,与客户端进行 TLS 握手正向代理发送给客户端的证书由自己的私钥签名由于客户端已经信任正向代理的根证书,所以证书可通过验证客户端与正向代理之间的 TLS 连接已建立正向代理得到明文请求,因此可以记录或修改它正向代理得到明文响应,因此可以记录或修改它CONNECT github.com:443建立 TLS 连接TLS 连接建立成功HTTP/1.1 200 Connection EstablishedTLS 握手消息TLS 握手消息[TLS 流][GET / HTTP/1.1][Host: github.com][TLS 流][GET / HTTP/1.1][Host: github.com][TLS 流][HTTP/1.1 200 OK][<HTML Page>][TLS 流][HTTP/1.1 200 OK][<HTML Page>]客户端正向代理github.com

3. Demo

mitm.py:

发送请求: