在 nginx 中重定向使用 SSLv3 连接的用户

在 nginx 中重定向使用 SSLv3 连接的用户

由于 POODLE,我原本打算放弃对 SSLv3 的所有支持,但发现仍然有一些人使用 Windows XP 上的 IE 等旧版浏览器。

我如何从 nginx 内部检测这些仅使用 SSLv3 的用户,并将他们重定向到某些带有进一步说明的帮助页面?

我绝对需要没有解决办法以防止这些用户使用不安全的浏览器。

如果我能对所有非 SNI 浏览器做同样的事情,我会特别高兴:SSLv3 不附带 SNI,所以如果我可以重定向非 SNI 浏览器,它也会解决 SSLv3 问题。

答案1

抛开保持 SSLv3 启用的问题,您可以简单地指示 nginx 根据是否正在使用 SSLv3 协议进行重定向:

if ($ssl_protocol = SSLv3) {
  rewrite ^ /poodle-doodle.html;
}

您可以从 shell 中测试这一点:

$ wget --secure-protocol=SSLv3 -O - $SERVER_URL
# or
$ curl -v -3 $SERVER_URL

答案2

我不是 nginx 配置专家,但应该可以为特定主机名设置一个设置,并为所有其他请求设置一个默认设置。如果客户端使用 SNI,并且 SNI 中给出的主机名与配置匹配,则基于名称的主机的设置将自动与 https 一起使用。在所有其他情况下,即不同的主机名、没有 SNI 的 TLS 客户端和使用 SSL 3.0(不支持 SNI)的客户端,将使用默认设置,以便您可以在那里提供不同的信息。然后,此默认设置可以执行您想要向旧客户端发出的所有警告。

这样,您还可以使用不同的证书,例如为所有 SNI 客户端提供用 SHA-256 签名的证书,但为其他客户端仅提供用 SHA-1 签名的证书,因为这些较旧的客户端可能尚不支持 SHA-256。

编辑:根据 Xavier Lucas 的评论,它将仅使用默认(非 SNI)配置中的证书设置,但其他设置取决于 Host 标头。这意味着非 SNI 客户端没有不同的文档根目录。

相关内容