强制https整个站点,而无需将http重定向到https


14

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


如果您不希望人们被重定向到https,那么您想做什么呢?
迈克尔·汉普顿

@MichaelHampton也许我在问新手问题,但实际上我想“删除” http,而唯一存在的是https。或者,如果这不可能,那么我可以使用重定向,只要它足以保证安全。我听说重定向http-> https不太好,因为它仍然是http,并且在重定向期间可以拦截流量。
Marko Tamburic 2014年

HTTP 301永久重定向是您的朋友,只是不要忘记设置过期时间。
Marcel 2014年

您可以删除http。但是,如果用户未输入https://,则该用户只会收到一条连接被拒绝的消息。对于某些站点,这样做会更好,因为安全性更高。如果有可用的http版本,则可能会发送cookie,并且第一个请求未加密。对于公司邮件系统这样的事情,仅https +用户培训就可以了,对于一般站点,您可能会失去很多访问者。
约瑟夫(Josef)说恢复莫妮卡(Monica)

Afaik通过HTTP2成为可能,但是仍然无法避免ssl条带化攻击(在下面的答案中进行描述)。
peterh-恢复莫妮卡

Answers:



22

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

IE还不支持它,但是其他所有专业都支持。


它仍然不能防止第一个请求。
珍妮·D

3
@JennyD我已经在回答中确切地说了这一点。
ceejayoz

@JennyD“保护”是什么意思?MiM不能对http-> https重定向执行任何操作,除非它们弄乱了本地dns / routing并伪造了您的整个域。在那种情况下,您做什么都不重要,因为永远不会访问您的服务器。
Red Alert

2
@JennyD好吧,HSTS确实比您的帖子更好,它说“重定向是实现此目的的方法”。可以随时进行重定向。使用HSTS进行的重定向每年每位用户+浏览器(或标头上的到期时间)只能进行一次MITM转换-其他所有不要求的时间。
ceejayoz 2014年

1
@MarkoTamburic没有理由不能将两者结合在一起。
ceejayoz 2014年

7

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

防止这种情况的唯一肯定方法是根本不提供HTTP服务。不要在端口80上应答,除非可以提供纯文本页面,以引导用户使用HTTPS再试一次(但提供攻击者可以操纵的链接)。这将迫使用户键入https://他们的浏览器,因此他们将使用SSL发起连接并防止MITM攻击。


3
不过,这是一个折衷,因为大多数用户不会输入https://。取而代之的是,他们会说“呵呵,站点已损坏”然后离开。最好的情况可能是同时www.example.com响应HTTP和HTTPS,但是使应用程序本身admin.example.com仅在HTTPS 上运行。
ceejayoz

同意 实际上,几乎没有人这样做。
Andrew Schulman 2014年

我真的不知道这怎么能抵御MiM。如果中间的人可以修改您的超链接以指向其他地方,则意味着他可以控制用户的传入数据包。无论站点看起来如何,他都可以轻松地重定向到自己的站点,或添加所需的任何超链接。
Red Alert

但是,从理论上讲,如果客户端使用SSL发起连接,则不会。
安德鲁·舒尔曼

3
没错-但是,如果客户端使用SSL发起,OP不会有问题。他的问题是当他们启动时没有SSL,并且如果MiM主动破坏了它们,就无法可靠地使他们使用SSL。
红色警报


1

ceejayoz拥有最佳的答案,可以防止此处提到的特殊攻击,但我还想指出,这里很多人都缺少了,这基本上是HTTP的另一部分已经解决了。您要执行永久301重定向。这告诉客户端对新地址进行进一步的请求。因此,是的,如果有人输入错误的URL,他们将发出2个请求,但将来,一个好的客户端应该检测到对该URL的请求并发出正确的请求,以防止浪费更多的请求。问题在于,这仅适用于该确切的URL。HSTS还通过说“在接下来的n秒内也不允许来自该域的任何非安全连接”来改进此方案。

用户不应在不安全的位置访问敏感站点。他们尤其不应在不安全的地方注册他们。这些是基本的用户安全性原则,应该像“不要打开不受信任的来源的附件”这样教。对于从未访问过的站点,防止MiM攻击确实是最好的答案。

附带说明,某些浏览器通过说某些已知站点始终使用HSTS对此进行了改进。不幸的是,您不能轻松地将自己添加到此列表中。

进一步阅读:http : //coderrr.wordpress.com/2010/12/27/canonical-redirect-pitfalls-with-http-strict-transport-security-and-some-solutions/

http://dev.chromium.org/sts

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.