Https
Http和Https
- 其实HTTPS就是从 HTTP 加上 SSL/TLS (加密处理+认证+完整性保护)
完整的https通信过程,三次RTT:tcp握手一次RTT,TLS握手两次RTT
HTTPS工作原理
- 一、首先客户端发起连接请求,将自身支持的加密(RSA)和哈希算法(sha256)连带发给服务器(服务器端有非对称加密的公钥和私钥)
- 二、服务器端接受请求,选取一组加密和哈希算法后,将服务器证书(含公钥)发送给客户端
- 三、客户端收到服务器端证书并使用根证书验证证书后,从中取出公钥,然后本地生成一段随机数,将此随机数用公钥加密后发送给服务器端
- 四、服务器端用私钥解密出这段随机数作为对称加密的秘钥。之后双方就可以进行对称加密(DES、AES等)。
证书校验过程
校验证书的过程:
第一步是校验证书网站域名、有效期等。
第二步是校验证书本身是否可信:主要是依靠验证证书的信任链条完成。
比如根证书A->B->服务端证书C,那么首先要验证C是由B签署的,这一步的具体步骤是:
1. **用B证书的公钥解密C证书的签名信息后拿到C证书的hash值(签署时该Hash值由B的私钥加密生成),**
2. **然后再用hash算法(B证书上带的签名算法)计算B证书的<u>待签名数据</u>后得到计算hash值,**
3. **将证书解密的hash值与计算hash值比较即可。**
第三步是使用CRL(证书吊销列表)或OCSP(在线证书状态协议)确认证书是否已被吊销。
1 | 证书内容可简化为: |
抓包软件怎么实现的
以我熟悉的抓包软件whistle为例,抓包软件能抓https内容的核心是:你的手机安装了whistle的自签名根证书,同时你的请求都是代理给whistle的,然后whistle会发送给客户端经自签名根证书签署过的伪造服务器证书,故而能通过客户端的证书校验,从而拿到请求原文。
手机安装了抓包软件的自签名证书后,抓包工具在作为代理进行HTTPS流量捕获时,实际上充当了中间人。抓包开启后,客户端https请求的握手对象实际上是抓包软件,服务端拿到的请求地址是 抓包软件的地址。手机的请求也实际上是与抓包软件在交互,抓包软件再与服务器交互。故而抓包软件能记录并修改客户端的请求与响应
自签名证书:抓包软件生成一个自签名的证书(自签名证书是一种灵活且方便的SSL/TLS证书解决方案,是由证书的所有者自己签发的,适用于于开发测试环境和内部网络。然而,由于它不是由受信任的三方证书颁发机构即CA签发的,使得它无法提供可靠的身份验证,无法适用于公网)
- 客户端信任自签名证书:
- 当用户在设备上安装抓包软件的自签名证书后,这个证书被设备作为受信任的根证书。设备会信任由这个自签名证书签发的所有证书。
- 中间人代理握手:
- 抓包软件充当“中间人”,拦截客户端的HTTPS请求。客户端发出的请求首先到达抓包软件。
- 抓包软件向客户端提供一个由它自己的自签名根证书签署的伪造服务器证书(目标服务器的替身证书)。
- 因为客户端已经信任抓包软件的自签名证书,所以它会信任这个伪造的服务器证书,并与抓包软件进行TLS握手。
这样,手机上的浏览器或应用程序在连接时实际上是与抓包软件建立的https握手。
抓包软件的主要目的是捕获、分析和调试网络流量。其工作步骤如下:
- 客户端通过代理发送请求:
- 抓包软件配置为代理,客户端配置通过此代理发送所有网络请求。
- 抓包软件生成一个自签名证书,客户端将其安装为受信任的根证书。
- 代理解析并再发送请求:
- 客户端的请求首先由抓包软件接收。对于HTTPS请求,抓包软件会使用自签名证书解密这些请求。
- 抓包软件记录和分析解密后的请求内容,然后重新加密并发送到目标服务器。
- 服务器响应经过代理返回客户端:
- 目标服务器返回响应,抓包软件解密并记录这些响应数据。
- 抓包软件再重新加密这些数据并发送回客户端。
VPN与抓包软件的原理类似,都是通过一层中间人,将客户端的请求实际上代理到中间人层发起请求。
不同的是由于抓包软件使客户端安装的自签名证书,客户端在证书校验时遇到抓包软件自签名证书签署的伪造服务器证书会校验通过,使客户端的请求都能在中间人层解密后查看和修改,之后抓包再转发。
而VPN则是通过加密隧道(加密整个传输链路):使用协议如IPsec、OpenVPN、L2TP等),在原本就由ssl/tls加密的数据上再加密一层,之后无法感知传输内容原原本本的转发。