2013-03-18 147 views
2

作爲Java Web應用程序的一部分,我期望通過瀏覽器證書實現客戶端身份驗證。我已經能夠找到關於如何在客戶端和服務器上生成和安裝證書的信息。Java手動客戶端證書身份驗證

在訪問方面,我能找到的所有信息似乎都是關於配置對特定路徑的訪問,例如www.mydomain.com/securearea並讓服務器處理訪問。

但是,我想根據用戶是否提供有效的客戶端證書而不是一攬子訪問塊來實現自定義行爲。基本上我希望能夠創造一個方法類似hasValidClientCertificate()

不幸的是,我無法找到任何提及,我怎麼能編程檢查客戶端在Java中的有效證書。我正在使用Tomcat。這不是我的強大領域,所以對任何提示或建議都非常感激。

您的時間非常感謝

保羅

+0

您是否看到下面的答案? – Michael 2013-03-21 06:30:40

回答

1

您需要執行幾個步驟

1)配置Tomcat來進行客戶端證書身份驗證(在server.xml):

<Connector port="8443" 
protocol="HTTP/1.1" 
SSLEnabled="true"   
maxThreads="150" 
minSpareThreads="25" 
maxSpareThreads="75" 
enableLookups="false" 
disableUploadTimeout="true" 
acceptCount="100" 
keyAlias="tomcat" 
debug="0" 
scheme="https" 
secure="true" 
clientAuth="want" 
sslProtocol="TLS" 
keystoreFile="server.keystore" keystorePass="changeit" 
truststoreFile="trust.keystore" truststorePass="changeit"/> 

關於clientAuth屬性的說明來自http://tomcat.apache.org/tomcat-7.0-doc/config/http.html

設置爲想要如果您希望SSL堆棧請求客戶端證書,但不會失敗,如果沒有出現。使用下面的代碼http://tomcat.apache.org/tomcat-7.0-doc/ssl-howto.html

2)實現你hasValidClientCertificate():

請參考Tomcat的認證爲更好的解釋如何配置Tomcat的SSL

X509Certificate[] crts = (X509Certificate[]) request.getAttribute("javax.servlet.request.X509Certificate"); 
if (crts!= null && crts.length > 0) { 
    return true;   
} 

3)如果您需要訪問用戶證書請訪問

X509Certificate userCert = crts [0]; 
相關問題