正常HTTPS握手过程
第一步:客户端发起明文请求:将自己支持的一套加密规则、以及一个随机数(Random_C)发送给服务器 第二步:服务器选出一组加密规则和hash算法,并将自己的身份信息以证书(CA:包含网站地址、加密公钥、证书颁发机构等信息)和一个随机数(Random_S)发给客户端 第三步:客户端接到服务器的响应验证证书的合法性(颁发证书的机构是否合法,证书中包含的网站地址是否与正在访问的地址一致等)。如果证书受信任,则浏览器栏里面会显示一个小锁头,否则会给出证书不受信的提示。 如果证书受信任,或者是用户接受了不受信的证书,客户端做以下事情:
第四步,服务器接收客户端发来的数据要做以下四件事情:
第五步,客户端拿到握手信息解密,握手结束。 客户端解密并计算握手消息的HASH,如果与服务端发来的HASH一致,此时握手过程结束。
第六步,正常加密通信 握手成功之后,所有的通信数据将由之前协商密钥enc_key及约定好的算法进行加密解密。 这里浏览器与网站互相发送加密的握手消息并验证,目的是为了保证双方都获得了一致的密码和hash算法,并且可以正常的加密解密数据,为后续真正数据的传输做一次测试。 从握手过程,我们可以得知:
第一步, fiddler向服务器发送请求进行握手, 获取到服务器的CA证书, 用根证书公钥进行解密, 验证服务器数据签名, 获取到服务器CA证书公钥。
第二步, fiddler伪造自己的CA证书, 冒充服务器证书传递给客户端浏览器, 客户端浏览器做跟fiddler一样的事。
第三步, 客户端浏览器生成https通信用的对称密钥, 用fiddler伪造的证书公钥加密后传递给服务器, 被fiddler截获。
第四步, fiddler将截获的密文用自己伪造证书的私钥解开, 获得https通信用的对称密钥。
第五步, fiddler将对称密钥用服务器证书公钥加密传递给服务器, 服务器用私钥解开后建立信任, 握手完成, 用对称密钥加密消息, 开始通信。
第六步, fiddler接收到服务器发送的密文, 用对称密钥解开, 获得服务器发送的明文。再次加密, 发送给客户端浏览器。
第七步, 客户端向服务器发送消息, 用对称密钥加密, 被fidller截获后, 解密获得明文。由于fiddler一直拥有通信用对称密钥, 所以在整个https通信过程中信息对其透明。
手机和Fiddler都正常安装SSL证书,依旧显示”Tunnel to……443”
本文分享自微信公众号 - 搜狗测试(SogouQA),作者:PY
原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。
原始发表时间:2020-09-14
本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。
我来说两句