tomcat實現SSL配置(詳細版)

Tomcat雙向認證的問題這麼多,貼一篇我總結的Tomcat雙向認證方法 

tomcat實現SSL配置  

tomcat實現SSL配置 
編輯tomcat的配置文件server.xml,去掉下面SSL Connector的註釋,修改成以下: 
  <!-- Define an SSL HTTP/1.1 Connector on port 8443 -->; 

  <Connector className="org.apache.catalina.connector.http.HttpConnector" 
          port="8443" minProcessors="5" maxProcessors="75" 
          enableLookups="true" 
    acceptCount="10" debug="0" scheme="https" secure="true">; 
    <Factory className="org.apache.catalina.net.SSLServerSocketFactory" 
          clientAuth="false" keystoreFile="tomcat.keystore" 
          keystorePass="tomcat" protocol="TLS"/>; 
  </Connector>; 
keystoreFile的路徑是TOMCAT的安裝路徑下的tomcat.keystore(使用keytool生成的證書庫文件) 
>;keytool -genkey -alias tomcat -keyalg RSA -keysize 1024 -validity 365 -keystore tomcat.keystore
keystoreFile保存了服務器端的證書庫,用於客戶端認證。 

經常使用的配置屬性: 
clientAuth 
若是想要Tomcat爲了使用這個socket而要求全部SSL客戶出示一個客戶證書,置該值爲true。  
keystoreFile 
若是建立的keystore文件不在Tomcat認爲的缺省位置(一個在Tomcat運行的home目錄下的叫.keystore的文件),則加上該屬性。能夠指定一個絕對路徑或依賴$CATALINA_BASE環境變量的相對路徑。 
keystorePass 
若是使用了一個與Tomcat預期不一樣的keystore(和證書)密碼,則加入該屬性。  
keystoreType 
若是使用了一個PKCS12 keystore,加入該屬性。有效值是JKS和PKCS12。  
sslProtocol 
socket使用的加密/解密協議。若是使用的是Sun的JVM,則不建議改變這個值。聽說IBM的1.4.1版的TLS協議的實現和一些流行的瀏覽器不兼容。這種狀況下,使用SSL。  
ciphers 
此socket容許使用的被逗號分隔的密碼列表。缺省狀況下,可使用任何可用的密碼。  
algorithm 
使用的X509算法。缺省爲Sun的實現(SunX509)。對於IBM JVMS應該使用ibmX509。對於其它JVM,參考JVM文檔取正確的值。  
truststoreFile 
用來驗證客戶證書的TrustStore文件。  
truststorePass 
訪問TrustStore使用的密碼。缺省值是keystorePass。  
truststoreType 
若是使用一個不一樣於正在使用的KeyStore的TrustStore格式,加入該屬性。有效值是JKS和PKCS12。  


使用https://localhost:8443 就能夠進行ssl鏈接的檢測 

---------------------------------------------------------------------------------------- 
上訴的SSL鏈接是客戶端單向認證服務器,若是雙向認證,將server.xml文件的Connector配置 
clientAuth="false"  
Java服務器端的證書庫,服務器認證客戶端時使用的根證書庫。 
證書庫位置:JAVA_HOME/jre/lib/security/cacerts keystore密碼爲:changeit 

將客戶端我的證書的根證書導入服務器的證書庫,就能夠認證客戶端。 

服務器端證書的生成: 
>;keytool -genkey -alias tomcat -keyalg RSA -keysize 1024 -validity 365 -keystore tomcat.keystore
>;keytool -certreq -alias tomcat -file Server.csr -keystore tomcat.keystore 生成證書請求文件 
使用openssl命令用根證書籤名,再導入簽名證書 
>;keytool -import -trustcacerts -alias tomcat -file Server.pem -keystore tomcat.keystore 
注意-trustcacerts選項,使用服務器的證書庫認證該證書,首先要將根證書導入cacerts中。 

---------------------------------------------------------------------------------------- 
Tomcat配置SSL,我出現的問題 
我用openssl建立了CA證書,Server證書,Client證書。 
使用keytool將Server證書導入tomcat.keystore文件中,將Tomcat的配置文件server.xml關於SSL的配置設爲keystoreFile=tomcat.keystore.SSL鏈接時,客戶端認證tomcat.keystore中的服務器證書。 
將CA證書導入$JAVA_HOME\jre\lib\security\cacerts這個keystore中,用於驗證客戶端證書。 
在IE中安裝CA證書和Client證書(pkcs12,包含私鑰的我的證書形式)。 
創建SSL鏈接https://localhost:8443,鏈接失敗。 

通過反覆思量,知道問題所在,SSL鏈接時,客戶端認證服務器時,須要驗證服務器的簽名,那麼tomcat.keystore中就應該有Server的私鑰。因此導入Server證書時,應該導入包含私鑰的Server證書。 
keytool命令不能導入私鑰文件,能夠經過在keystore中生成自簽名證書,導出證書請求,用CA證書籤名後,在導回的方法。 
導回簽名證書的過程 
>;keytool -import -trustcacerts -alias tomcat -file Server.pem -keystore tomcat.keystore 
注意-trustcacerts選項,使用服務器的證書庫認證該證書,首先要將根證書導入Java的根證書庫中:JAVA_HOME\jre\lib\security\cacerts中。 

---------------------------------------------------------------------------------------- 
分析IE實現實現SSL鏈接的中的證書雙向認證過程 
在地址欄中輸入https://localhost:8443 

客戶端向服務器發送hello消息,tomcat服務器偵聽8443端口,收到SSL鏈接的hello消息,服務器發送server certificate,而且發送client certificate request.客戶端IE收到server certificate後取出issuer項,和IE受信任的根證書庫中證書的subject比對,找到合適的根證書認證server certificate。而且同時向服務器發送client certificate,服務器收到client certificate後,tomcat服務器查找根證書庫cacerts中的根證書的suject,找到合適的根證書認證client certificate.在認證的同時完成密鑰協商。客戶端認證結束後,IE會彈出"安全警報"對話框,用戶能夠查看服務器證書,以及服務器證書是否受信任,能夠選擇是否繼續SSL鏈接。html

原文出自:http://www.chinaunix.net/jh/13/580856.html 算法

轉載請註明原文出處,謝謝!apache

相關文章
相關標籤/搜索