Tomcat6配置SSL的方法

轉自:http://blog.csdn.net/xueyepiaoling/article/details/6138798


因爲做項目測試的時候,用到了https,所以現在需要在tomcat中配置SSL。

 

tomcat6配置雙向認證 

1、生成服務器端證書

[java] view plain copy
  1. keytool -genkey -keyalg RSA -dname "cn=localhost,ou=sango,o=none,l=china,st=beijing,c=cn" -alias server -keypass password -keystore server.jks -storepass password -validity 3650  
[java] view plain copy
  1. <br>2、生成客戶端證書 <br>  
[java] view plain copy
  1. keytool -genkey -keyalg RSA -dname "cn=sango,ou=sango,o=none,l=china,st=beijing,c=cn" -alias custom -storetype PKCS12 -keypass password -keystore custom.p12 -storepass password -validity 3650  


客戶端的CN可以是任意值。 
3、由於是雙向SSL認證,服務器必須要信任客戶端證書,因此,必須把客戶端證書添加爲服務器的信任認證。由於不能直接將PKCS12格式的證書庫導入,我們必須先把客戶端證書導出爲一個單獨的CER文件,使用如下命令,先把客戶端證書導出爲一個單獨的cer文件:

[java] view plain copy
  1. keytool -export -alias custom -file custom.cer -keystore  custom.p12 -storepass password -storetype PKCS12 -rfc  


然後,添加客戶端證書到服務器中(將已簽名數字證書導入密鑰庫)

[java] view plain copy
  1. keytool -import -v -alias custom -file custom.cer -keystore  server.jks -storepass password  


4、查看證書內容

[java] view plain copy
  1. keytool -list -v -keystore server.jks -storepass password  


5、配置tomcat service.xml文件

[xml] view plain copy
  1. <Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"  
  2.     maxThreads="150" scheme="https" secure="true"  
  3.     clientAuth="true" sslProtocol="TLS"  
  4.     keystoreFile="D:/server.jks" keystorePass="password"  
  5.     truststoreFile="D:/server.jks" truststorePass="password"  
  6. />  


clientAuth="true"表示雙向認證 
6、導入客戶端證書到瀏覽器 
雙向認證需要強制驗證客戶端證書。雙擊“custom.p12”即可將證書導入至IE 

7、修改應用的web.xml,使其自動啓用SSL

<login-config>
 <auth-method>CLIENT-CERT</auth-method>
 <realm-name>Client Cert Users-only Area</realm-name>
</login-config>
<security-constraint>
 <web-resource-collection>
  <web-resource-name>SSL</web-resource-name>
  <url-pattern>/*</url-pattern>
 </web-resource-collection>
 <user-data-constraint>
  <transport-guarantee>CONFIDENTIAL</transport-guarantee>
 </user-data-constraint>
</security-constraint>

 


tomcat6配置單向認證 

1、生成服務器端證書

[java] view plain copy
  1. keytool -genkey -keyalg RSA -dname "cn=localhost,ou=sango,o=none,l=china,st=beijing,c=cn" -alias server -keypass password -keystore server.jks -storepass password -validity 3650  


2、由於是單向認證,沒有必要生成客戶端的證書,直接進入配置tomcat service.xml文件

[xml] view plain copy
  1. <Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"  
  2.     maxThreads="150" scheme="https" secure="true"  
  3.     clientAuth="false" sslProtocol="TLS"  
  4.     keystoreFile="D:/server.jks" keystorePass="password"      
  5. />  


clientAuth="false"表示單向認證,同時去掉truststoreFile="D:/server.jks" truststorePass="password"這2個屬性

 

PS:用https://localhost:8443測試,之前一直不成功,是因爲配置的時候,用了eclipse啓動的。之後雖然修改了server.xml文件,但是一直就是報異常,說connceted refused。後來將server刪除,重新生成就可以了。

 

另附:雙向認證的批處理文件,用記事本編輯,文件後綴改爲.bat

 

set local_driver=%cd:~0,2%
set local_path=%cd%

keytool -genkey -keyalg RSA -dname "cn=localhost,ou=sango,o=none,l=china,st=beijing,c=cn" -alias server -keypass password -keystore server.jks -storepass password -validity 3650

keytool -genkey -keyalg RSA -dname "cn=sango,ou=sango,o=none,l=china,st=beijing,c=cn" -alias custom -storetype PKCS12 -keypass password -keystore custom.p12 -storepass password -validity 3650

keytool -export -alias custom -file custom.cer -keystore  custom.p12 -storepass password -storetype PKCS12 -rfc

keytool -import -v -alias custom -file custom.cer -keystore  server.jks -storepass password

keytool -list -v -keystore server.jks -storepass password

%local_driver%
cd %local_path%

pause

 

有一些其它的選項配置SSL協議。你可能需要增加或改變下面的屬性值,取決於你開始對keystore的配置

 

clientAuth

如果想要Tomcat爲了使用這個socket而要求所有SSL客戶出示一個客戶證書,置該值爲true。

keystoreFile

如果創建的keystore文件不在Tomcat認爲的缺省位置(一個在Tomcat運行的home目錄下的叫.keystore的文件),則加上該屬性。可以指定一個絕對路徑或依賴$CATALINA_BASE環境變量的相對路徑。

keystorePass

如果使用了一個與Tomcat預期不同的keystore(和證書)密碼(changeit),則加入該屬性。

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。

 

在Java中取得證書內容:

1 X509Certificate[] certChain=(X509Certificate[])request

2         .getAttribute("javax.servlet.request.X509Certificate");
3 int len=certChain.length;
4 if (len>0){
5     X509Certificate cert = (X509Certificate)certChain[0];
6     Principal subject = cert.getSubjectDN();
7     String certSubject = subject.getName();
8 }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章