https部分
1.https原理
- 1.客户端(浏览器)的“证书管理器”里有“受信任的根证书颁发机构”,即对应的CA和服务器站点的证书。
- 2.客户端向服务器端发送加密请求(如https://www.baidu.com)。
- 3.服务器收到请求后,需要向客户端验证自己的身份。于是将自己的公钥发送给CA,CA用自己的私钥对服务器的公钥加密,生成数字签名。CA再将服务器的公钥、数字签名和服务器的一些其它消息整合在一起,生成证书,再将证书返回给服务器。
- 4.客户端对服务器发送过来的证书,用CA的公钥解密,可得服务器的公钥和一些服务器的相关信息,与浏览器中的服务器站点的证书进行匹配。若匹配成功,则表明验证成功。
- 5.验证成功后,浏览器将网站公钥加密的一个随机密码数发送给网站服务器,网站服务器通过私钥解密得到随机密码数,这个随机密码数就是对称加密的密钥,此步骤实现了密码协商的过程。
- 6.浏览器和网站的服务器就可以通过这个密码进行加密通信。
2.SSL Spoofing(https协议降级)
攻击能够实现的原因:实现和实现SSL/TLS协议出现了漏洞,导致攻击者可以攻击一些旧版本的SSL/TLS协议。当SSL/TLS加密协议漏洞爆出来之后,最新版本的SSL/TLS协议修复了已知漏洞,但旧版本的加密协议却变得不安全了。
https降级协议
首先我们知道,SSL/TLS协议通过握手来确定通信信息,其中握手双方要统一加密协议版本。
在握手过程中确认加密协议版本:
- 1.客户端发送一个数据包ClientHello,这个数据包中保存着客户端支持的加密协议版本
- 2.服务器收到这个ClientHello数据包,查看里面客户端支持的加密协议版本,然后匹配服务器自己支持的加密协议版本,从而确认双方应该用的加密协议版本。
- 3.服务器发送ServerHello数据包给客户端,告诉客户端要使用什么加密协议版本。
但在上述过程中,如果客户端发送给服务器的ClientHello数据包中说自己仅支持某个有漏洞的旧版本加密协议(比如仅支持SSLv3.0),服务器两种可能:
- 1.服务器支持多版本,认可使用有漏洞的旧版本协议
- 2.服务器不支持有漏洞的旧版本,拒绝客户端的这次请求
对于情况2,攻击者无能为力。
对于情况1,攻击者能作为中间人控制被攻击者的浏览器发起漏洞版本的https请求,那虽然攻击者听到的也是加密过后的数据,但因为加密协议有漏洞,可以解密这些数据,所以数据和明文传输没有什么差别。