Tomcat 7和request.getUserPrincipal()上的相互身份验证

时间:2012-02-05 17:36:56

标签: java tomcat struts pki authentication

我正在尝试在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()来获取客户端证书的Common Name,但它只是null。假设getUserPrincipa()应该设置为CN,我是否正确?如果是的话,我做错了什么/错过了什么。如果不是,我如何在服务器端检索CN?

感谢。

1 个答案:

答案 0 :(得分:4)

我像个假人一样在错误的地方寻找。我从请求中获得了所有证书信息:

request.getAttribute(org.apache.catalina.Globals.CERTIFICATES_ATTR);