虚拟机上有一个具有专用 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)
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,我们深表歉意。