Websphere App Server相互SSL - 从客户端证书身份验证中获取CN

时间:2017-01-05 11:20:10

标签: web-services authentication https client websphere

我有什么:

我需要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());

1 个答案:

答案 0 :(得分:1)

您可能想尝试"直接连接"证书属性。这是为了解决发布与最终客户端不同的证书的中间(SSL终止)代理(如带有插件的Web服务器)。这个属性是

com.ibm.websphere.ssl.direct_connection_peer_certificates

您可以通过com.ibm.websphere.webcontainer.is_direct_connection确定是否从直接连接对等方或代理对等方获取证书。

另请参阅:WAS 9 doc page