为了提高安全性,我们希望对我们托管的所有客户站点进行 https 访问,并在我们的条款和条件中保证这一点。
问题是当前 Apache 网络服务器配置为使用“永久重定向”Apache 指令将所有 http 请求重定向到 https 请求。从技术上讲,我们仍在使用不安全的 http 协议,尽管它仅用于重定向,并且无法通过 http 访问任何客户数据。
两个问题:
完全封锁80端口有什么坏处吗?我能想到的唯一缺点是客户被迫在其网址前输入 https://,而不是依赖自动重定向。
如果客户发送 http POST 请求,Apache httpd 会在实际 POST 数据传输到我们的服务器之前响应重定向,还是仅在收到(未加密的)客户数据后才发送重定向?
请指教。
在考虑您的意见后,我们将对我们的网络设置进行以下更改:
- 将修改各个客户虚拟机,使其不再侦听端口 80。重定向配置也将被删除。
- 将配置防火墙,以便将任何端口 80 流量路由到一个特殊服务器,该服务器的唯一目的是向发送者返回正确的重定向响应。
- 为了获得最大的安全性,这个特殊的服务器将位于与所有其他系统不同的 VLAN 中,我们甚至可以使用 Raspberry Pi 等专用硬件来代替标准 VM。
- 将为所有客户实例添加 HSTS 支持。
通过使用此设置,我们可以证明没有未加密的流量到达或离开客户网络,同时仍提供用户友好的自动重定向到 https。
IMO,您的“唯一缺点”是一个很大的缺点。我知道没有人
https://
经常输入 URL。我怀疑 99% 的普通用户只会“嗯,网站已关闭”。HTTP
POST
确实会发送未加密的数据。它也会失败,因为重定向会导致它变成GET
.POST
也就是说,如果您已经重定向到 HTTPS ,人们几乎没有理由将 HTTP发送到您的 URL。您可能真正想要的是HTTP Strict Transport Security,它将告诉用户的浏览器他们应该始终为您的域使用 HTTPS。查看限制 - 新用户的第一个请求不受它保护,但所有后续请求都受保护(这可以通过将您的域提交到主要浏览器供应商的 STS 预加载列表来解决)。
这正是让端口 80 保持开放、用户友好的主要原因。AFAIK 大多数浏览器在您输入 URL 时仍默认使用 http://,这将在端口 80 被阻止时导致错误消息。
只有真正敬业的人会再次尝试使用 https://,但几乎所有其他访问您网站的访问者可能会认为您的网站已关闭而去其他地方。
重定向仅在客户端请求完成后发出,因此在数据以明文形式传输之后。
对于托管在您自己的服务器上的表单,您可以通过设置HTTP 严格传输安全策略来防止浏览器通过不安全的通道提交数据。
是的,删除重定向会导致重大问题。新客户不会知道这一点,您可能希望允许访问的许多爬虫也不会知道。您要关闭的威胁向量可以忽略不计。
POST 数据可能会作为单个 HTTP 请求以明文形式发送,然后触发重定向。然而,在大多数情况下,一个 POST 意味着一个表单。除了您的团队之外,还有其他人创建提交到您网站的表单吗?