在具有专用 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”或熟悉的语法)。
Apache 的 mod_ssl在启用该指令时提供了许多环境变量,其中包括 SSL 协议:
SSLOptions
+StdEnvVars
然后,您可以在使用SSLv3 时将其用作设置标头的条件:
要始终使用 SSL 协议设置标头,以下可能有效:
这有一个小优势,对于简单的场景,您不需要产生开销,但可以直接使用语法
SSLOptions +StdEnvVars
访问某些 SSL 变量。%{FOOBAR}s
两者都没有经过测试。
Set
SSLOptions +StdEnvVars
和各种 SSL/TLS 相关的环境变量都会被设置。(并且您可能会发现此值已在您的 Web 服务器配置中设置,就像在某些示例配置中一样。)您的应用程序要检查的环境变量将是
SSL_PROTOCOL
.对于未能按时从您的环境中删除 IE6 和 XP,我们深表哀悼。