我有什么:
我需要SSL相互身份验证,因此我转到保护质量(QoP)设置,并设置客户端身份验证=必需。 到目前为止,一切正常。
问题是我的EJB应用程序需要客户端证书的公用名来获取用户ID,它将在业务逻辑中使用。在这里,我失败了。 代码段(Web服务端):
MessageContext context = wsContext.getMessageContext();
HttpServletRequest req = (HttpServletRequest)context.get(MessageContext.SERVLET_REQUEST) ;
System.out.println("!! isSecure " + req.isSecure());
X509Certificate[] certificates = (X509Certificate[]) req.getAttribute("java.servlet.request.X509Certificate");
if (null != certificates && certificates.length > 0) {
...
} else {
System.out.println("!! Empty certificates");
}
isSecure返回true,但我收到“空证书”消息。
我的猜测可能是接下来的原因。当我输出9449端口上使用的SSL配置时,第一行是“com.ibm.ssl.clientAuthenticationSupported = false”,而通过管理控制台将其设置为必需。
com.ibm.websphere.ssl.JSSEHelper jsseHelper = com.ibm.websphere.ssl.JSSEHelper.getInstance();
java.util.Properties props = jsseHelper.getProperties("WebServiceConfigure");
System.out.println("!!! WebServiceConfigure = " + props.toString());
答案 0 :(得分:1)
您可能想尝试"直接连接"证书属性。这是为了解决发布与最终客户端不同的证书的中间(SSL终止)代理(如带有插件的Web服务器)。这个属性是
com.ibm.websphere.ssl.direct_connection_peer_certificates
您可以通过com.ibm.websphere.webcontainer.is_direct_connection
确定是否从直接连接对等方或代理对等方获取证书。
另请参阅:WAS 9 doc page。