我正在尝试在 Tomcat 7 应用程序上设置相互身份验证。我的 server.xml 有以下连接器:
<Connector className="org.apache.coyote.tomcat4.CoyoteConnector"
port="8443"
enableLookups="true"
acceptCount="100"
connectionTimeout="20000"
useURIValidationHack="false"
disableUploadTimeout="true"
scheme="https"
secure="true"
SSLEnabled="true"
keystoreFile="servercert.jks"
keystorePass="password"
truststoreFile="truststore.jks"
truststorePass="password"
clientAuth="true"
sslProtocol="TLS" />
当我尝试使用与“https://testserver:8443/myapp/LoadUser.do”类似的 URL 执行 struts 操作时,浏览器会提示我输入客户端证书。当我提供服务器信任的证书时,它似乎可以很好地进行身份验证。在服务器端,我希望通过调用 request.getUserPrincipal() 来获取客户端证书的公用名,但它只是空。我是否正确假设 getUserPrincipa() 应设置为 CN?如果是,我做错了什么/遗漏了什么。如果没有,如何在服务器端检索CN?
谢谢。
最佳答案
我像个假人一样看错了地方。我从请求中获取所有证书信息:
request.getAttribute(org.apache.catalina.Globals.CERTIFICATES_ATTR);
关于java - Tomcat 7 和 request.getUserPrincipal() 上的相互身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9151395/