在最近 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;
另参考:这里