这里有一篇文章, http://div.io/topic/907 ,说了一种思路可以使用山寨域名来欺骗用户,可以绕开 HSTS ,且不会有证书错误的提示。
但是我认为这种思路是不可行的。
这篇文章说这种手段和 SSLStrip 类似,只是从更改协议变成了干脆更改域名。但是 SSLStrip 是:用户本来就使用 HTTP 协议,中间人保持了和客户端的 HTTP 连接。而这篇文章的办法是:用户访问一个 HTTPS 站点时,让用户跳转到另外一个域名。
我认为,这个跳转是无法做到的,因为:
①如果从 DNS 劫持入手,即使劫持了 DNS ,浏览器需要的还是特定域名的证书,没有证书,就没有办法完成之后的 SSL 握手(所以 HTTPS 不能被 DNS 劫持,只能被 DNS 污染从而无法完成连接)
②如果想在 SSL 握手时跳转,由于此时 SSL 握手还未完成,连接还未建立,中间人给客户端发送的 HTTP 的 302 请求也是不会被接受的。
③在 SSL 握手完成后,客户端与服务器的通信被加密,无法被篡改为 302 跳转的请求。
我没有办法确定我是否对协议理解有误,或者还有什么忽略的点,特此来询问一下,这篇文章的思路可行吗?
但是我认为这种思路是不可行的。
这篇文章说这种手段和 SSLStrip 类似,只是从更改协议变成了干脆更改域名。但是 SSLStrip 是:用户本来就使用 HTTP 协议,中间人保持了和客户端的 HTTP 连接。而这篇文章的办法是:用户访问一个 HTTPS 站点时,让用户跳转到另外一个域名。
我认为,这个跳转是无法做到的,因为:
①如果从 DNS 劫持入手,即使劫持了 DNS ,浏览器需要的还是特定域名的证书,没有证书,就没有办法完成之后的 SSL 握手(所以 HTTPS 不能被 DNS 劫持,只能被 DNS 污染从而无法完成连接)
②如果想在 SSL 握手时跳转,由于此时 SSL 握手还未完成,连接还未建立,中间人给客户端发送的 HTTP 的 302 请求也是不会被接受的。
③在 SSL 握手完成后,客户端与服务器的通信被加密,无法被篡改为 302 跳转的请求。
我没有办法确定我是否对协议理解有误,或者还有什么忽略的点,特此来询问一下,这篇文章的思路可行吗?