我有一个使用双向 TLS 来验证连接客户端的 TCP 应用程序。
由于流量增加,我想对应用程序进行集群化,并使用 nginx 对节点进行负载平衡。我已经使用 nginx 的stream
模块实现了这一点,该模块(据我所知)充当第 4 层平衡器。
此时,我认为在 nginx 上立即放弃未通过 mTLS 验证的连接尝试是合理的,这样上游节点就不必理会它们了。
但是,这意味着我必须在 nginx 上终止 TLS 连接。不幸的是,我的应用程序依赖于从经过验证的客户端证书中获取客户端的身份。
有没有办法让 mTLS 在 nginx 上检查,然后重新使用客户端证书进行上游连接?
对于 HTTP 应用程序,我已经看到了在 nginx 终止 TLS 连接并将客户端证书作为自定义标头传递的解决方法(例如proxy_set_header X-SSL-CERT $ssl_client_cert;
),但这在我的情况下显然不起作用。
答案1
不,你不能这么做。你不能既终止连接又保持端到端连接。
但如果你相信您的代理,您的代理可以简单地注入一个标头并使用它自己的客户端证书来验证该连接是否值得信赖并由给定的客户端证书发起。