强制使用 https 访问整个网站,但不将 http 重定向到 https

强制使用 https 访问整个网站,但不将 http 重定向到 https

当我研究如何将整个网站设为 https 时,有很多讨论。大多数答案是将 http 重定向到 https(.htaccess 文件),这并不好,因为两次执行相同的工作(两个请求)并不好。此外,“中间人”首先使用 http,而我希望我的网站直接使用 https。有没有其他方法可以将整个网站设为 https,以及如何做到这一点?例如,当用户输入 example.com 时,example.com 会自动转到 https,而无需先从 http 或其他任何内容重定向?

答案1

不。您无法神奇地让访问者的浏览器选择正确的协议。重定向是实现此目的的方法。

答案2

http://en.wikipedia.org/wiki/HTTP_Strict_Transport_Security允许您的服务器指示该域只能通过 HTTPS 访问。这仅适用于后续请求,因此会有初始 HTTP 加载,但即使有人明确输入 HTTP,后续请求也会加载 HTTPS。

IE 尚不支持它,但其他主流浏览器都支持它。

答案3

正如其他人所说,您不能强迫用户选择正确的协议。但是当用户尝试使用 HTTP 时,您应该怎么做?重定向也是不够的,因为位于您和客户端之间的攻击者可以拦截重定向,因此客户端永远不会看到它。客户端将继续发送纯 HTTP,攻击者将从服务器剥离 SSL 层(SSL 剥离攻击)。

唯一可以确保防止这种情况发生的方法是根本不提供 HTTP。不要在端口 80 上应答,除非提供一个纯文本页面,指导用户使用 HTTPS 重试(但不是提供一个链接,攻击者可以操纵该链接)。这将强制用户https://在浏览器中输入内容,这样他们就会使用 SSL 启动连接并防止 MITM 攻击。

答案4

不完全正确:如何使用 DNS/主机名或其他方式解析特定 IP:端口

有一种方法,但是大多数浏览器没有实现rfc2782。

相关内容