我使用 Wireshark 来分析网络流量。
当我打开 Web 浏览器并输入地址: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 。
小智 7
您的浏览器会记住之前与站点交互的端口和协议。
Paypal 使用 HTTP 严格传输安全。这意味着服务器已经(可能通过端口 80)发送了一个响应头,包括Strict-Transport-Security:max-age=63072000在您开始查找之前。显示的年龄以秒为单位。因此,在访问端口 80 后的接下来两年内,浏览器不必再次访问端口 80;它应该转到端口 443。事实上,后续访问端口 443 将收到相同的指令,因此它无限期地适用于每年使用 Paypal 的人。
这是对先前方案的改进,其中对端口 80 的每个请求都重定向到端口 443,后者较慢。依赖重定向也不太安全,因为如果使用重定向,浏览器不会介意 Paypal(或者冒充 Paypal 的 MITM 攻击者)突然从 HTTPS 转换为 HTTP。在 HTTP Strict Transport Security 下,这种攻击最终会更加引人注目,因为攻击者将被迫使用 HTTPS 与浏览器通信,但他们无法访问任何颁发给 Paypal 的 HTTPS 服务器证书。