我有一个 Servlet
容器 (Glassfish/OC4J),它为一些可以使用 HTTPS 访问的 JAX-WS Web 服务端点提供服务。 SSL 配置为支持客户端身份验证和仅服务器身份验证(如 Glassfish 上的 client-auth="want")。
在我的端点实现中,我想知道连接是否是在有或没有客户端身份验证的情况下完成的。我已经可以访问 HttpServletRequest
对象,但是 getAuthType()
方法始终返回 null,无论客户端身份验证是否完成(使用wireshark 检查以确保它满足我的要求)。
有人知道如何访问此类信息吗?
非常感谢
最佳答案
javax.servlet.request.X509Certificate
请求属性应返回 java.security.cert.X509Certificate 的数组.
您可以使用以下方式从您的请求中获取它:
X509Certificate[] certs = req.getAttribute("javax.servlet.request.X509Certificate");
如果非空,并且包含某些内容,则第一个元素 (certs[0]
) 将是客户端证书本身。该数组中可能还有其他元素,其中包含中间 CA 证书(客户端提供的可以是证书链),其中 cert[i]
由 cert[i+ 颁发1]
.
关于java - HttpServlet - 如何知道是否使用 SSL 客户端身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8505071/