1、HTTPS有什么用

由于HTTP的传输特点,有三大风险:
窃听风险:通信使用明文(不加密),内容可能会被窃听
伪装风险:不验证通信方的身份,因此有可能遭遇伪装
篡改风险:无法证明报文的完整性,所以有可能已遭篡改
使用 HTTPS 通信机制可以有效地防止这些问题。
HTTPS = HTTP + 加密 + 认证 + 完整性保护

2、HTTPS的加密过程

HTTPS采用的是 非对称加密 + 对称加密 组合的方式来进行加密,服务器拥有公钥A私钥B,加密过程如下:
1、客户端向服务器发起请求
2、服务器将包含 公钥A 的证书发送给客户端
3、客户端收到证书后,随机生成 密钥C,用 公钥A 进行加密传输给服务器
4、服务器收到后,用 私钥B 进行解密得到 密钥C
5、这时客户端和服务器都有了 密钥C,之后双方用这个 密钥C 进行对称加解密

3、通过证书验证身份

为了避免公钥被篡改,HTTPS使用了证书的方式进行验证对方的身份,当证书验证无误后,才会进行后续操作。

3.1、验证证书的真实性

1、服务器使用摘要算法(如MD5)生成证书明文的摘要,然后用 CA的私钥 对摘要进行加密(签名)。
2、客户端收到证书和加密过的摘要后,使用同样的摘要算法生成证书的摘要,再用 CA的公钥 对加密过的摘要进行解密,对比两个摘要是否相同。
通过这样的加解密方式可以解决身份认证的问题,如果客户端收到的是假证书,那么CA的公钥是无法解密的,如果证书被篡改,摘要会比对不成功。

*第三方权威机构(Certificate Authority,简称 CA)

3.2、防止证书被调包

如果中间人也向CA申请了证书,是否可以再传输过程中替换证书?
答案是不行,因为客户端除了通过验签的方式验证证书是否合法之外,还需要验证证书上的域名与自己的请求域名是否一致,中间人中途虽然可以替换自己向CA申请的合法证书,但此证书中的域名与客户端的域名不一致,也不会认证通过。

3.3、Charles Https 抓包原理

Charles进行Https抓包之前,需要客户端先安装Charles的证书并设置代理,这个证书里有Charles的公钥。
image.png

Charles 和服务器

1、当客户端向服务器发起请求时,Charles会拦截请求并伪装成客户端向服务器请求。
2、当服务器返回证书后,Charles会使创建密钥,并用服务器证书中的公钥进行加密后返回给服务器。
3、之后Charles与服务器通过这个密钥进行通信。

客户端和 Charles

1、Charles拦截请求后会将自己的证书返回给客户端。
2、由于客户端已经信任过该证书,所以会用Charles的公钥来加密对称密钥,发送给Charles。
3、之后Charles与客户端用这个密钥进行通信。

这样Charles就成了一个中间人,对服务器来说他是“客户端”,对客户端来说他是“服务器”,真正的客户端和服务器的通信均被Charles拦截了。

4、保证数据的完整性

在以上流程中,应用层发送数据时会附加一种叫做 MAC(Message Authentication Code)的报文摘要。MAC 能够查知报文是否遭到篡改,从而保护报文的完整性。