带Jetty和空密码的java双向SSL
我有一个应用程序在Jetty中运行。在它前面,我有一个负载平衡器。要求由负载平衡器执行SSL解密,而web容器只执行SSL客户端身份验证
理论上,负载平衡器在解密内容方面非常有效,可以做到这一点,并将其以明文形式传递给web容器
你知道如何做到这一点吗
你可以在下面搜索框中键入要查询的问题!
我有一个应用程序在Jetty中运行。在它前面,我有一个负载平衡器。要求由负载平衡器执行SSL解密,而web容器只执行SSL客户端身份验证
理论上,负载平衡器在解密内容方面非常有效,可以做到这一点,并将其以明文形式传递给web容器
你知道如何做到这一点吗
# 1 楼答案
你的标题中的“空密码”是什么意思还不清楚。有3 possible candidates:
TLS_NULL_WITH_NULL_NULL
、TLS_RSA_WITH_NULL_MD5
和TLS_RSA_WITH_NULL_SHA
。第一个不执行任何身份验证,它们都不提供任何加密。它们对你的目标毫无用处。在浏览器和负载平衡器之间使用普通密码套件(包括身份验证和加密)。负载平衡器和工作节点之间的加密通常是可选的,仅当您不信任它们所在的网络时才需要加密(无论如何,这将是一个完全不同的SSL/TLS连接,与终端浏览器完成的客户端证书身份验证无关)只有SSL/TLS服务器可以请求(和验证)客户端证书身份验证。在这种情况下,这将是负载平衡器
如果您想让负载平衡器处理SSL/TLS通信,它应该验证证书(可能是针对您配置的CA),然后将证书信息中继到工作节点
如何做到这一点将取决于负载平衡器。如果是ApacheHTTPD服务器,
mod_proxy_ajp
将通过AJP协议(SSLOptions +ExportCertData +StdEnvVars
)中继客户端证书mod_jk
还可以在需要时中继完整的客户端证书链(JkOptions +ForwardSSLCertChain
)如果您想使用} )传递证书,使用类似}属性(它应该是
mod_proxy_http
,一个技巧是通过HTTP头(^{RequestHeader set X-ClientCert %{SSL_CLIENT_CERT}s
的东西。如果该标题来自客户端的浏览器,则应确保已清除该标题(否则,用户可能伪造该标题)。在这种情况下,您需要编写一个过滤器作为Jetty服务器的一部分来处理该头文件,并将其放入javax.servlet.request.X509Certificate
{X509Certificate
的数组)。在这之后,你应该或多或少处于与AJP相同的阶段。如果其他负载平衡器能够以类似的方式填充HTTP头,那么这也可以用于其他负载平衡器