通过 HTTP 标头将 SSL 协议信息传递给后端

tpm*_*ml7 14 ssl nginx poodle

在最近发现 Poodle 漏洞后,我们的团队决定从 SSLv3 继续前进。但彻底清除之前,他们要提醒日常用户,他们的浏览器使用过时的SSLv3。于是,我们萌生了这样的想法

  • 从前端 SSL 卸载(我们使用 nginx)检测协议(SSLv3、TLS1 等...)
  • 通过 HTTP 标头将该信息(SSL 协议)传递到 Apache 后端。

然后我们的后端代码将处理该标头并在客户端使用 SSLv3 时发出警告。

我知道 nginx 有功能proxy_set_header。所以这个很简单

proxy_set_header X-HTTPS-Protocol $something;
Run Code Online (Sandbox Code Playgroud)

现在,问题是:显然 nginx 知道客户端使用的协议,但是如何通过 HTTP 标头将该信息传递给后端?

谢谢


正如类似线程Apache redirect user 如果他们使用 SSLv3所指出的那样,这个想法可能变得非常非常糟糕。

原因是 TLS 握手发生在 HTTP 流量通过 TLS 隧道发送之前。当我们的后端检测到 SSL 协议时,客户端可能已经在他的第一个请求中发送了私有数据。对于永久和长期解决方案,我们应该考虑禁用 SSLv3。

mas*_*oeh 15

Nginx 使用了许多可以在配置中使用的变量。此页面提供了变量的完整列表。在 HTTPS 请求中保存协议的变量是ssl_protocol. 引文:

$ssl_protocol
Run Code Online (Sandbox Code Playgroud)

返回已建立的 SSL 连接的协议;

所以你的proxy_set_header配置是

proxy_set_header X-HTTPS-Protocol $ssl_protocol;
Run Code Online (Sandbox Code Playgroud)

另一个参考:这里