HTTPS协议等效于通过SSL或 TLS连接(通过 TCP)使用 HTTP。
因此,首先向服务器打开一个TCP 连接(在端口 443 上)。这通常足以向www.mysite.com
攻击者透露服务器的主机名(即在您的情况下)。直接观察IP地址,并且:
- 您之前通常会进行未加密的 DNS 查询,
- 许多 HTTPS 服务器每个 IP 地址只为一个域提供服务,
- 服务器的证书以明文形式发送,并包含服务器名称(可能在多个之间),
- 在较新的 TLS 版本中,有服务器名称指示,客户端通过它向服务器指示希望使用哪个主机名,因此服务器可以提供正确的证书,如果它有多个。(这样做是为了能够远离 2。)
然后发生 TLS 握手。这包括密码套件的协商,然后是密钥交换。假设您的浏览器和服务器中的至少一个没有NONE
在接受的套件中包含密码,那么密钥交换之后的所有内容都会被加密。
并且假设没有成功的中间人攻击(即攻击者拦截连接,并提供您的浏览器接受的伪造服务器证书),密钥交换是安全的,没有窃听者可以解密任何内容然后在您和服务器之间发送,并且没有攻击者可以在不被注意到的情况下更改内容的任何部分。这包括 URL 和 HTTP 请求的任何其他部分,以及来自服务器的响应。
当然,正如 DW 所提到的,从加密的数据流中可以看到请求(其中包含的可变数据并不比 URL 多多少,可能是一些 Cookie)和响应的长度。这可能会破坏保密性,特别是在服务器上只有少量不同资源的情况下。还有任何后续资源请求。
不过,您在 URL(或请求的任何其他部分)中的密码应该仍然是安全的 - 最多可以知道其长度。