2012-02-05 48 views
1

我想在Tomcat 7應用程序上設置相互認證。我server.xml中有以下接口:Tomcat 7上的相互認證和request.getUserPrincipal()

<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" /> 

當我嘗試使用類似的URL打一個Struts動作爲 「https:// TESTSERVER:8443/MyApp的/ LoadUser.do」,我被提示瀏覽器獲取客戶端證書。當我提供我的服務器信任的證書時,它似乎可以正常驗證。在服務器端,我期望通過調用request.getUserPrincipal()來獲取客戶端證書的公用名,但它只是空。我是否認爲getUserPrincipa()應該設置爲CN?如果是的話,我做錯了什麼/失蹤。如果不是,我如何在服務器端檢索CN?

謝謝。

回答

2

我正在尋找一個錯誤的地方像一個假人。我從請求中獲得所有證書信息:

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