我有一个Servlet
容器(Glassfish / OC4J),可以使用HTTPS为一些JAX-WS Web服务端点提供服务。 SSL配置为支持客户端身份验证和仅服务器身份验证(如Glassfish上的client-auth =“want”)。
在我的端点实现中,我想知道连接是否使用客户端身份验证完成。我已经可以访问HttpServletRequest
对象,但是getAuthType()
方法总是返回null,如果客户端身份验证完成,则不会返回任何内容(使用wireshark检查以确保它符合我的要求)。 / p>
有人知道如何访问这些信息吗?
非常感谢
答案 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]
颁发。