当我研究如何将整个网站设为 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。