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

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

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

为了达到这个目的,我想把在代理(Apache)上使用的SSL / TLS版本信息注入原始的HTTP请求,让后端应用程序有条件地放置“升级你的系统,恐龙! 基于实际使用的传输层安全方法的通知。

我如何configuration注射? 只有在使用debugging标志编译Apache时,我才能find所需的环境variables,但这在生产中是不可能的。

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

当启用SSLOptions指令+StdEnvVars时,Apache的mod_ssl会使许多环境variables可用,其中包括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的开销,但可以直接使用%{FOOBAR}s语法访问某些SSLvariables。

没有被testing。

设置SSLOptions +StdEnvVars和各种SSL / TLS相关的环境variables将被设置。 (你可能会发现这个值已经在你的web服务器configuration中设置了,就像在一些示例configuration中一样。)

您的应用程序将要检查的环境variables将是SSL_PROTOCOL

对于无法及时从您的环境中删除IE6和XP,您有任何的吊</s>之意。