强制 https 整个站点而不将 http 重定向到 https

Mar*_*ric 14 http https

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

cee*_*yoz 22

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

IE 尚不支持,但所有其他专业都支持。

  • @JennyD 我已经在回答中准确说了。 (3认同)
  • @JennyD 好吧,HSTS 确实是比您的帖子更好的解决方案,您的帖子说“重定向是实现此目的的方法”。重定向可以随时被 MITMed。使用 HSTS 的重定向每年只能对每个用户 + 浏览器(或标题上的任何到期时间)进行一次 MITMed - 所有其他时间都没有请求。 (2认同)

Jen*_*y D 20

不。您不能神奇地让访问者的浏览器选择正确的协议。重定向是一种方法。


And*_*man 7

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

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

  • 不过,这是一种权衡,因为大多数用户不会输入“https://”。相反,他们会说“嗯,网站坏了”然后离开。最好的情况可能是让“www.example.com”同时响应 HTTP 和 HTTPS,但让应用程序本身在诸如“admin.example.com”之类的东西上运行,只有 HTTPS。 (3认同)
  • 确实如此 - 但如果客户端使用 SSL 启动,则 OP 没有问题。他的问题是当他们在没有 SSL 的情况下启动时,如果有 MiM 积极破坏它,就没有办法可靠地让他们使用 SSL。 (3认同)