我编写了一个Servlet过滤器,以为Web应用程序增加安全性。在某些情况下,我想验证与应用程序服务器的连接是使用双向SSL(TLS 1.0)建立的。通常,这是通过HttpServletRequest.getAttribute("javax.servlet.request.X509Certificate")
完成的;但是,在我的情况下,应用程序服务器前面有一个反向代理,并且此代理通过WL-Proxy-Client-Cert
标头将客户端证书传递给应用程序服务器。这样,当我检索到上述属性时,就会获得最初出现在标头中的客户端证书。我要做的不仅是验证客户端证书,还要确保反向代理与应用程序服务器之间的连接使用双向SSL进行保护。有没有办法从Servlet进行此验证?我正在使用WebLogic 10.3.4,Java EE5。将WebLogic SSL端口配置为要求双向SSL并不是一种选择,因为同一台服务器上的某些其他服务仅需要双向SSL。
最佳答案
无论客户端是Web浏览器还是反向代理,检查客户端证书都是相同的。只需获取"javax.servlet.request.X509Certificate"
属性,并检查其是否与您的反向代理匹配(基于DN或颁发者)。WL-Proxy-Client-Cert
仅在确认提供给应用服务器的证书是代理的证书后,应用服务器希望知道向代理提供了哪些客户端证书时,才起作用。