HTTPS因为增加了CA证书,可以在会话前通过证书验证证明通信的彼此就是所声称的人,因此可以防范中间人攻击。这种防范中间人攻击的前提是在HTTPs协议的双向认证上。如果仅仅实现了HTTPs的单向认证,如不验证客户端,只验证服务器,这种情况下还是不能抵御中间人攻击的,这种情况下就会出现SSL剥离攻击(SSLTrip)和SSL劫持攻击(使用各种代理软件,如burpsuit或Filder等)。
SSL剥离攻击剥离SSL协议,表现为用户和攻击者之间使用HTTP,攻击者和服务器之间使用https协议。
SSL劫持攻击表现为用户和攻击者之间使用攻击者伪造的CA证书使用其https协议进行通信,(其中重要的步骤是把burpsuit的CA根证书导入用户浏览器,这样用户浏览器就能信任假CA发给中间人的证书(即信任中间人burpsuit),建立客户端和中间人之间的会话信道)。而攻击者和服务器之间使用真正的CA证书创建的对称秘钥进行加密,攻击者收到客户端信息先用前者会话秘钥解密,再使用后者之间的会话秘钥加密。这样使得客户端和服务器都以为是和真正的对方通信。
为了防止SSL剥离攻击,可以(1)在服务器上开启HSTS(HTTP Strict Transport Security, HTTP 严格传输安全),使服务器只接收使用HTTPS的连接。(2)将 HSTS 站点列表内置到浏览器中,这样只要浏览器离线判断该站点启用了 HSTS,就会跳过原先的 HTTP 重定向,