是否可以使用 Apache 设置后端应用程序可以使用的 SSL/TLS 版本 HTTP 标头?

是否可以使用 Apache 设置后端应用程序可以使用的 SSL/TLS 版本 HTTP 标头?

虚拟机上有一个具有专用 IP 的服务,需要通过 SSLv3 访问(带有 IE6 客户端的 WinXP)。几年前,我将该服务移至该虚拟机,以便能够为所有其他服务禁用 SSLv3。

我想通知该服务的 SSLv3 客户端,该服务将在“某个时间”需要 TLS 1.1 或更高版本。该通知不得显示在任何其他客户端上(业务决策)。

为了实现这一点,我考虑将代理(Apache)上使用的 SSL/TLS 版本信息注入到原始 HTTP 请求中,以便后端应用程序根据实际使用的传输层安全方法有条件地放置“升级你的系统,恐龙!”通知。

如何配置注入?我发现只有使用调试标志编译 Apache 时才需要环境变量,但在生产中这是不可能的。

最终结果应该是 Apache Proxy 正在注入 HTTP 请求标头“X-TLS-Version: SSL3”(或“X-TLS-Version: TLS12”或熟悉的语法)。

答案1

Apache 的 mod_ssl 使得许多环境变量可用时SSLOptions指令+StdEnvVars已启用,其中包括 SSL 协议:

SSL_PROTOCOL string SSL 协议版本(SSLv2、SSLv3、TLSv1、TLSv1.1、TLSv1.2)

然后你可以将其用作状况设置标题当使用 SSLv3 时:

SSLOptions +StdEnvVars    
SetEnvIf SSL_PROTOCOL "SSLv3" insecure-protocol=true
RequestHeader set X-TLS-Version "SSLv3" env=insecure-protocol 

要始终使用 SSL 协议设置标头,可以执行以下操作:

RequestHeader set X-TLS-Version %{SSL_PROTOCOL}s  

这有一个小小的优点,对于简单的场景,您不需要承担开销,SSLOptions +StdEnvVars但可以直接使用语法访问某些 SSL 变量%{FOOBAR}s

均未进行测试。

答案2

设置SSLOptions +StdEnvVars各种与 SSL/TLS 相关的环境变量将被设置。(并且您可能会发现该值已在您的 Web 服务器配置中设置,就像在某些示例配置中一样。)

您的应用程序想要检查的环境变量是SSL_PROTOCOL

对于您未能及时从您的环境中删除 IE6 和 XP,我们深表歉意。

相关内容