HttpServlet - 如何知道是否使用SSL客户端身份验证

gas*_*ush 2 java authentication ssl servlets jax-ws

我有一个Servlet容器(Glassfish/OC4J),它为一些可以使用HTTPS访问的JAX-WS Web服务端点提供服务.SSL配置为支持客户端身份验证和仅服务器身份验证(如Glassfish上的client-auth ="want").

在我的端点实现中,我想知道连接是否使用客户端身份验证完成.我已经有了访问该HttpServletRequest对象的权限,但是该getAuthType()方法总是返回null,如果Client auth完成则不会返回null(使用wireshark检查以确保它符合我的要求).

有谁知道如何访问这些信息?

非常感谢

Bru*_*uno 5

所述javax.servlet.request.X509Certificate请求属性应返回的数组java.security.cert.X509Certificate.

您可以使用以下命令从您的请求中获取:

X509Certificate[] certs = req.getAttribute("javax.servlet.request.X509Certificate");
Run Code Online (Sandbox Code Playgroud)

如果非null,并且如果它包含某些内容,则第一个元素(certs[0])将是客户端证书本身.此数组中可能还有其他元素,其中包含中间CA证书(客户端提供的内容可以是证书链),其中cert[i]包含cert[i+1].