HTTP协议发展历史
HTTP 0.9版本 1991年发布 仅支持HTML文档传输
HTTP 1.0版本 1996年5月发布 支持Cache、MIME、method等,增加状态码
HTTP 1.1版本 1997年5月发布 支持长连接、支持缓存和以管道的方式发送多个请求
HTTPS 2000年发布 支持TLS层安全传输
HTTP 2.0版本 2015年支持二进制帧传输、多路复用和服务端推送
HTTPS建立连接的过程
1、Client向Sever发送TLS的版本号、支持的加密算法和随机数C;
2、Sever向Client发送确定的加密算法、随机数S和证书;
3、Client验证证书;
(3.1)Client已经内置了所有权威结构的证书
(3.2)Sever证书包括签名和摘要,签名是CA(权威机构)的私钥对摘要加密的结果
(3.3)摘要是证书的版本、序列号、颁发者主体和有效期进行合并计算的结果
(3.4)Client用内置的CA公钥对证书签名进行解密,与摘要进行对比验证证书有效性
4、Client组装会话密钥(C+S+预主密钥);
5、Client用CA公钥对预主密钥加密发送给Server;
6、Sever用私钥对预主密钥进行解密;
7、Sever组装会话密钥;
8、Client用会话密钥加密握手信息,发送给Server;
9、Sever用会话密钥加密握手信息,发送给Client;
Charels抓包原理
总结概括:
Charles作为“中间人代理”,拿到了服务端证书公钥和HTTPS连接的对称密钥,前提是客户端选择信任并安装Charles的CA证书,否则客户端就会报警并中止连接。
具体过程:
1、客户端向服务端发起HTTPS请求;
2、Charles拦截客户端请求,伪装成客户端向服务端发起请求;
3、服务端向客户端(实际是Charles)返回服务端的CA证书;
4、Charles拦截服务端的响应,获取服务端证书公钥,自己制作一张证书,发送给客户端;
5、客户端收到Charles的证书后,生成一个对称密钥,用Charles的公钥加密,发送给Charles;
6、Charles拦截客户端响应,用自己的私钥解密对称密钥(此时Charles拿到了对称密钥),用服务端的证书公钥对对称密钥加密,发送给服务端;
7、服务端用自己的私钥解密对称密钥,向Charles发送响应;
8、Charles拦截服务端的响应,替换成自己的证书发送给客户端;
9、连接建立,Charles拿到了服务端证书的公钥和客户端与服务端协商的对称密钥,之后就可以进行解密或者更改加密的报文了。