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

时间:2011-12-14 13:12:49

标签: java authentication servlets ssl jax-ws

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

在我的端点实现中,我想知道连接是否使用客户端身份验证完成。我已经可以访问HttpServletRequest对象,但是getAuthType()方法总是返回null,如果客户端身份验证完成,则不会返回任何内容(使用wireshark检查以确保它符合我的要求)。 / p>

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

非常感谢

1 个答案:

答案 0 :(得分:5)

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

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

X509Certificate[] certs = req.getAttribute("javax.servlet.request.X509Certificate");

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