什么是HTTPS
HTTPS(全称: Hyper Text Transfer Protocol over SecureSocket Layer),是以安全为目标的HTTP通道,在HTTP的基础上通过传输加密和身份认证保证了传输过程的安全性。HTTPS在HTTP的基础之上加入SSL,HTTPS的安全基础是SSL,因此加密的详细内容就需要SSL。HTTPS存在不同于HTTP的默认端口,及一个加密/身份验证层(在HTTP于TCP之间)。这个系统提供了身份验证与加密通讯方法。它被广泛用于万维网上安全敏感的通讯,例如交易支付等方面。
HTTPS连接建立流程
HTTPS连接建立流程- Client向Server发送报文,包含TLS版本号,支持的加密算法,随机数 C。
- Server返回握手报文消息,包含最终决定的加密算法(这个加密算法一定是Client发送给Server加密算法的子集)、随机数 S、Server数字证书。
- Client验证Server证书(证书包含的信息有:公钥、颁发机构、过期时间等)。
- Client生成预设主密钥(premaster key),再加上随机数C和随机数S,按照一定的算法生成会话密钥。
- Client发送报文给Server,内容包括通过Server的公钥对预主密钥进行加密的数据。
- Server通过私钥解密,得到预主密钥。
- Server通过随机数C 、随机数 S 和预设主密钥组成会话秘钥, 跟客户端会话秘钥相同。
- Client发送会话秘钥加密的握手消息,主要验证服务端是否正常接受客户端加密的消息。
- 同样服务端也会通过会话秘钥加密一条消息回传给客户端,如果客户端能够正常接受的话表明SSL层连接建立完成了
Charles抓包原理
抓包原理图Charles利用HTTPS中间人攻击的漏洞来做的,Charles是中间人。
- 本地请求被劫持(如DNS劫持等),所有请求均发送到中间人的服务器
- 中间人服务器返回中间人自己的证书
- 客户端创建随机数,通过中间人证书的公钥对随机数加密后传送给中间人,然后凭随机数构造对称加密对传输内容进行加密传输
- 中间人因为拥有客户端的随机数,可以通过对称加密算法进行内容解密
- 中间人以客户端的请求内容再向官方网站发起请求
- 因为中间人与服务器的通信过程是合法的,官方网站通过建立的安全通道返回加密后的数据
- 中间人凭借与官方网站建立的对称加密算法对内容进行解密
- 中间人通过与客户端建立的对称加密算法对官方内容返回的数据进行加密传输
- 客户端通过与中间人建立的对称加密算法对返回结果数据进行解密
为什么客户端会信任中间人下发的证书呢?
问题就在与根证书的安装信任上。
比如在用Charles抓包HTTPS请求时,需要下载Charles的CA根证书,安装在iPhone手机中,并点击信任该证书。而Charles下发的证书就是由这个根证书签发的,手机就会认为其是合法的,因此校验通过。
手机证书信任设置
参考资料:
《计算机网络(第5版)》Andrew S. Tanenbaum David J. Wetherall
https协议 和 Charles 进行https抓包原理
《面试官系列 - https 真的安全吗,可以抓包吗,如何防止抓包吗》
网友评论