一.HTTPS的基础介绍
HTTPS(Hypertext Transfer Protocol over Secure Socket Layer)是一个安全的通信通道,基于HTTP,使用安全套接字层(TLS/SSL)进行信息交换
1.HTTP和HTTPS的区别
a.HTTPS在TCP传输层上多了一层SSL安全层,HTTPS是加密传输协议,HTTP是明文传输协议
b.HTTPS需要用到SSL证书
c.HTTPS标准端口号是443,HTTP标准端口号是80
image
2.HTTPS的数据传输流程
在HTTPS中,客户端首先打开一条到服务器端口443的连接,
一旦建立了TCP连接,客户端和服务器就会初始化SSL层,对加密参数进行沟通,并交换密钥,
握手完成的同时SSL的初始化也会完成,客户端将请求报文发送给安全层,在发送给TCP之前对报文进行加密处理
image
2.相比HTTP,HTTPS的优点
1).数据加密,传输内容进行混淆
2).身份验证,通信双方验证对方的身份真实性
3).数据完整性保护,检测传输内容是否被篡改或伪造
二.安全层的相关知识
1.对称加密和非对称加密技术
1).对称加密算法
加密和解密使用相同的密钥,优点是加密速度快,常见的算法如(DES,AES等)
2).非对称加密算法(公开密钥加密),有两个密钥(公钥和私钥),可以用来作为数字签名,常见的密钥交换算法(RSA,ECDHE,DH,DHE)
2.摘要算法
数字摘要是采用单项Hash函数将需要加密的明文"摘要成一串固定长度(128位)的密文"
2.数字证书CA
1).数字证书
数字证书就是身份认证机构完成的,证书由公钥、证书主体、数字签名等内容组成。
在客户端发起SSL请求后,服务器会将数字证书发给客户端,客户端会对证书进行校验
2).数字证书的作用
a.身份授权,确保浏览器访问的网站是经过CA验证的可信任的网站
b.分发公钥,每一个数字证书都包含了注册者生成的公钥,在SSL握手的时会通过消息传输给客户端
3).数字证书验证
a.客户端拿到服务器的公钥后,使用内置在客户端的CA证书的公钥对证书的摘要进行解密得到摘要A,
再根据签名的Hash算法计算得出证书的摘要B,进行比对
三.HTTPS的安全通信机制
下面是HTTPS安全通讯过程:
image
1.客户端发起HTTPS请求
1).客户端通过发送请求报文开始SSL通信,报文中包含客户端支持的SSL指定的版本、
加密组件列表(所使用的加密算法以及密钥长度)
2).随机数random_c,用于后续对称密钥的生成
2.服务器的配置
1).服务器在接收到客户端的请求之后,服务器需要确定加密协议的版本,以及加密算法
2).生成随机数random_S用于后续对称密钥的生成
3.传送证书
服务器发送给客户端公钥证书
4.客户端解析证书
由客户端的TLS/SSL完成
1).验证服务器返回的证书的有效性
2).客户端client_key_exchange作为回应,客户端使用一些加密算法,产生一个48个字节的key,用服务器返回的证书链中携带的公钥加密该随机数,发送给服务器
3).此时客户端已经拥有协商对称加密的信息:两个明文随机数 random_C 和random_S 与自己计算产生的Pre-master
通过一定规则计算得到协商的对称加密密钥(如enc_key = Fuc(random_C, random_S, Pre-Master))
4).客户端发送Change Cipher Spec报文告知服务器后续的通讯都 采用协商的对称加密密钥和加密 算法进行加密通讯
5.传送加密信息(传送的是用证书加密后的随机数)
6.服务器解密信息
1).服务器用私钥解密得到第三个随机数Pre-master,基于之前交换的明文随机数random_C、 random_S,
计算得到协商对称密钥enc_key = Fuc(random_C, random_S, Pre-Master)
2).计算之前所有接收信息的hash值H1,然后用计算得到的对称加密密钥解密客户端发送的信息,
得到数据H2,H1和H2进行比较验证协商对称加密密钥和协商算法的正确性
3).验证通过,服务器发送change_cipher_spec以告知客户端后续的通信都采用协商的密钥与算法尽心加密通信
7.传输加密后的信息
8.客户端解密信息
四.Charles的HTTPS抓包的原理
Charles本身是一个协议代理工具,如果只是普通的HTTP请求,因为数据本身没经过加密,因此代理可以知道客户端与服务器通信的内容。
1.Charles具体抓包流程
image
1.在进行抓包建立之前,需要安装Charles Root根证书,客户端提前安装信任Charles自己的证书中心,并对响应的域名开启HTTPS enable选项,
2.客户端向服务器发起HTTPS请求
3.Charles拦截客户端的请求,伪装成客户端向服务器进行请求
4.服务器向“客户端”(实际上是Charles)返回服务器的CA的证书
5.Charles拦截服务器的响应,获取服务器证书公钥,然后自己动态制作一张证书,
将服务器证书替换后发送给客户端(Charles拿到了服务器证书的公钥)
6.客户端接收到“服务器”(实际上是Charles)的证书后,生成一个对称密钥,
用Charles的公钥加密,发送给“服务器”(Charles)
7.Charles拦截客户端的响应,用自己的私钥解密对称密钥,然后用服务器证书公钥极爱,发送给服务器(Charles拿到了对称密钥)
8.服务器用自己的私钥解密对称密钥,向客户端(Charles)发送响应
9.Charles拦截服务器的响应,替换成自己的证书发送给客户端
10.连接建立,Charles拿到服务证书的公钥和客户端与服务器协商的对称密钥,之后就可以解密或者修改加密的报文了
根证书和动态签发证书:
证书的信任链体系,这是一个树状的结构,全球有为数不多的根证书颁颁发机构,授权二级证书颁发机构进行证书颁发,
而只要用户信任了根证书,就会对其下属二级证书机构颁发的所有证书都予以信任。