将HTTP重定向到HTTPS或拒绝使用HTTP?

时间:2017-11-14 14:18:18

标签: apache http security https

在Apache HTTPD服务器上配置,Web上的许多文章建议通过将所有HTTP请求重定向(永久)到HTTPS来强制执行HTTPS协议。

以下是我了解当用户尝试访问支持HTTP和HTTPS的服务器时所发生的事情:

  1. 客户端的用户代理(例如,网络浏览器,但不仅仅是)向http://my.domain.com发送请求。
  2. 服务器在端口80上接收请求,并将永久重定向(代码301)发送到https://my.domain.com
  3. 客户端的用户代理收到回复。根据状态代码,它会向https://my.domain.com发送相同的请求。
  4. 服务器在端口443上接收请求并发回所需内容。
  5. 因此,如果请求包含敏感数据,则在步骤1和步骤2之间,中间人可以在请求中恢复它,非加密。

    如果客户端使用Web浏览器,则此浏览器会在缓存中保留301重定向,并且下次客户端使用HTTP发送请求时,它将自动使用HTTPS发送它。

    但是,如果客户端经常清除缓存怎么办?或者使用除Web浏览器之外的其他用户代理,它不存储永久重定向? 我们不会在这里失去HTTPS的好处吗?

    具体示例:REST API,请求包含敏感数据。可以从任何HTTP客户端调用此API(在线,嵌入软件或网站,独立)。

    在这种情况下,为了强制使用HTTPS,在服务器级别上禁用 HTTP支持是否会更好?

    编辑2017-11-14:

    sys0dm1n告诉我下面的HSTS。但是,这种机制提供的安全性完全取决于用户代理是否符合规范。

    编辑2017-11-15:

    我收到第一个答案后编辑我的帖子,以确定我的担忧。

2 个答案:

答案 0 :(得分:3)

要确保您的网站始终使用https进行安全保护,一种方法是启用HSTS

  

自动将引用Web应用程序的任何不安全链接转换为安全链接。

要启用它,您需要在vHost配置中添加标题:

Header always set Strict-Transport-Security "max-age=63072000; includeSubdomains;"

确保已启用标头模块。

您可以按照说明here添加您的域名,以包含在Chrome的HTTP严格传输安全保护(HSTS)预载列表中。

  

这是一个将Chrome硬编码为仅限HTTPS的网站列表。

答案 1 :(得分:1)

" 禁用http会完全帮助吗?"

不,我不这么认为,这就是原因:据推测,您的客户端/浏览器在发送请求之前不知道是否存在运行http的站点。当然,它会收到类似404或类似的错误代码,但此时,原始请求将已经通过网络发送,并且任何人在中间"很可能已经能够观察到这一要求。

作为问题的一个简单说明,这里是一个假的http-url的调用,由Postman制作,一个陷入Fiddler的人。如您所见,返回 502错误,但原始请求仍包含敏感数据。

enter image description here

现在只是为了进行比较,如果我这样做,只是将网址更改为 https ,我会在Fiddler中获得不同的结果:

enter image description here

这会尝试设置隧道,但不会显示任何后期数据。

总而言之,您最好的选择可能是启用HSTS并将您的网站设置为HSTS preload list,这应该会阻止任何HTTP请求开始发送(至少recent versions of most major browsers

相关问题