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

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

在最近 Poodle 漏洞被曝光后,我们的团队决定放弃 SSLv3。但在完全删除之前,他们希望警告每日用户他们的浏览器使用已弃用的 SSLv3。因此,我们想出了

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

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

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

proxy_set_header X-HTTPS-Protocol $something;

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

谢谢


正如类似帖子所指出的那样如果用户使用 SSLv3,Apache 将重定向用户,这个想法可能会变得非常非常糟糕。

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

答案1

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

$ssl_protocol

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

所以你的proxy_set_header配置将是

proxy_set_header X-HTTPS-Protocol $ssl_protocol;

另参考:这里

相关内容