从 http 到 https 的强制重写是否安全?SSLRequireSSL 添加了什么?

信息安全 tls 阿帕奇
2021-08-13 16:58:23

我已经阅读了有关以下列方式强制 https 连接的矛盾建议:

RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}

对我来说,这似乎不允许任何人传递 http 请求。这种方法有什么缺点吗?

添加什么安全性

SSLRequireSSL

<directory />部分添加?我知道这会迫使 Apache 退回非 https 请求,但他们会通过吗?

或者换句话说:如果不是这样,实现仅 https 站点的最佳方式是什么?

我们没有 EV 证书,也没有庞大的用户群。我们拥有的是一系列调查网站,我们想让 http 成为不可能。

3个回答

如果不是这样,实现仅 https 站点的最佳方法是什么?

为 HTTP 使用单独的虚拟服务器,不链接到“真实”HTTPS 站点的任何资源。

为确保现代浏览器将来拒绝对您的站点使用纯 HTTP,请使用Strict Transport Security 标头

例如。

<VirtualHost *:80>
    ServerName www.example.com
    Redirect permanent / https://www.example.com/
</VirtualHost>

<VirtualHost *:443>
    ServerName www.example.com
    SSLEngine on
    Header set Strict-Transport-Security "max-age=8640000;includeSubdomains"
    ...site settings...
</VirtualHost>

SSLRequireSSL 添加了什么?

如果您在一个带有 的虚拟主机中SSLEngine optional,或者在一个由 HTTP 和 HTTPS 虚拟主机共享的包含配置中,保护特定资源可能很有用。

正如我在 Webmasters.SE 上的回答中所说的那样,解决这个问题的唯一通用解决方案是只为您的用户提供https://地址,并确保他们只希望使用该地址。最终用户有责任检查他们是否按照他们的预期使用 SSL/TLS。

尝试自动执行此操作的一种方法是鼓励用户使用支持HTTP 严格传输安全性的浏览器(同样,在所有浏览器都支持之前,这需要用户意识)。

其他形式的服务器强制升级(包括关闭普通 HTTP 端口)将容易受到 MITM 攻击。话虽如此:

  • 强制重定向 from http://tohttps://将保护用户免受窃听被动攻击。它还可能有助于提高用户对该问题的认识(即,如果他们从他们可以信任的网络连接,他们会习惯它,并且可能会觉得https://在其他网络上看不到它很奇怪)。出于这些原因,无论如何都值得这样做;你至少可以降低风险。
  • 将更多站点添加到预加载的 HSTS 列表中将是理想的,这样即使在第一次连接时也不会受到攻击。但是,在使用 HSTS 时,使用该浏览器配置在受信任的网络上建立一次连接就足以告诉浏览器继续为该站点使用 HTTPS。

完成此操作后,您仍然需要告诉用户不要忽略证书警告。

(如果使用 cookie,最好将所有这些与安全 cookie 结合起来。)

http 重定向不像简单地拒绝通过 http 访问那样安全。

使用 HTTP 地址的人仍然容易受到活动 MITM 的攻击。我可以拦截到 HTTPS 的重定向,并对其进行修改。我可以将它们保留在 HTTP 上,或者我可以重定向到我自己的 HTTPS 站点(以匹配您在我不拦截时显示的“挂锁”)。我可以使用一个看起来很像您自己的域名,或者一些看似合理的替代品。

诚然,如果您使用 EV 证书,用户将更容易发现我的攻击。但是,如果值得为 EV 证书付费,您可能有很高的安全要求和庞大的用户群,因此您仍然应该禁用 HTTP 访问以提供一些深度防御。