我正在尝试使用客户端密钥进行客户端身份验证的Web应用程序。我想我已经找出了整个信任库问题,所以我可以让客户端实际验证。但是我不想要客户端身份验证。我只想测试它并启用功能(如果已启用)。
我可以使用会请求它的.wantClientAuth,但如果它不存在则允许连接。但我找不到任何属性来查明请求是否已经过身份验证。
这应该存在,否则wantClientAuth的目的是什么。我该如何使用它?
答案 0 :(得分:0)
我没有在这里运行设置,现在就进行测试,但不应该
request.getUserPrincipal()
和
request.getAuthType()
给你你想要的东西。
请参阅http://www.docjar.com/docs/api/javax/servlet/http/HttpServletRequest.html
(假设您可以在您正在使用的上下文中访问servlet请求)
答案 1 :(得分:0)
如果您正在使用servlet API,请使用Tim的方法。根据您的调用情况,以下是其他一些想法。
握手完成后,您可以在SSLSession上调用getCertChain。如果它为null,则客户端不会使用客户端证书进行身份验证。
请参阅此处的自定义方法:
http://www.javadocexamples.com/java_source/org/mortbay/jetty/security/SslSocketConnector.java.html
或者,您可以在HttpsURLConnection上调用getLocalPrincipal或getLocalCertificates。如果它们为null,那么就没有客户端证书。