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的公钥。
Charles 和服务器
1、当客户端向服务器发起请求时,Charles会拦截请求并伪装成客户端向服务器请求。
2、当服务器返回证书后,Charles会使创建密钥,并用服务器证书中的公钥进行加密后返回给服务器。
3、之后Charles与服务器通过这个密钥进行通信。
客户端和 Charles
1、Charles拦截请求后会将自己的证书返回给客户端。
2、由于客户端已经信任过该证书,所以会用Charles的公钥来加密对称密钥,发送给Charles。
3、之后Charles与客户端用这个密钥进行通信。
这样Charles就成了一个中间人,对服务器来说他是“客户端”,对客户端来说他是“服务器”,真正的客户端和服务器的通信均被Charles拦截了。
4、保证数据的完整性
在以上流程中,应用层发送数据时会附加一种叫做 MAC(Message Authentication Code)的报文摘要。MAC 能够查知报文是否遭到篡改,从而保护报文的完整性。