我使用 Wireshark 来分析网络流量。
当我打开我的网络浏览器并输入地址:stackexchange.com 时,它首先执行 DNS 查询,收到答复,然后将 TCP Syn 数据包发送到端口 80 的正确 IP 地址。
但是当我输入 www.paypal.com 时,它也会执行相同的操作,但 TCP Syn 数据包会直接发送到端口 443。
DNS 答复似乎不包含目标端口,并且我的浏览器和目标站点之间也没有任何协议协商。我的浏览器如何知道目标端口?
请注意,我没有输入http://stackexchange.com或者https://www.paypal.com,而只是 stackexchange.com 和 www.paypal.com。
答案1
您的浏览器会记住上次与网站交互时的端口和协议。
Paypal 使用 HTTP 严格传输安全。这意味着服务器Strict-Transport-Security:max-age=63072000
在您开始查看之前就已经发送了(可能通过端口 80)响应标头。显示的时长以秒为单位。因此,在访问端口 80 后的两年内,浏览器不必再次访问端口 80;它应该访问端口 443。事实上,后续访问端口 443 将收到相同的指令,因此对于每年使用 Paypal 的人来说,该指令无限期适用。
这是对以前方案的改进,以前每个对端口 80 的请求都会重定向到端口 443,速度较慢。依赖重定向也不太安全,因为如果使用重定向,浏览器不会介意 Paypal(或者更确切地说是冒充 Paypal 的 MITM 攻击者)突然从 HTTPS 转换为 HTTP。在 HTTP 严格传输安全下,这种攻击最终会更加引人注目,因为攻击者将被迫使用 HTTPS 与浏览器通信,但他们无法访问颁发给 Paypal 的任何 HTTPS 服务器证书。
答案2
浏览器通常会先尝试 HTTP,然后重定向到 HTTPS。这是常见情况,但并非唯一情况。
Chrome 和 Firefox 支持HTTP 严格传输安全预加载列表,即那些只能通过 HTTPS 联系的站点列表,即使引用的是 HTTP URL。
更多详细信息请见这里。
答案3
Google Chrome、Mozilla Firefox 和 Internet Explorer/Microsoft Edge 通过实施“HSTS 预加载列表”来解决此限制,该列表包含支持 HSTS 的已知站点。因此,来自浏览器的请求将直接通过 https 发送到相应的 HSTS 配置服务器域。
否则,必须有一个 http 请求,并且服务器必须重定向到 https(在 HSTS 的情况下,服务器使用标头进行响应 - 仅使用 HTTPS:Strict-Transport-Security:max-age = 31536000)。
答案4
网络浏览器总是会请求端口 80,因此在所有 SSL 服务于其服务器端之后,当客户端连接到您的服务时,服务器会将连接重定向到安全的连接或“https”。