https單向/雙向認證及tomcat配置https方法

https單向/雙向認證及tomcat配置https方法
tomcat6配置:
1.單向認證,就是傳輸的數據加密過了,但是不會校驗客戶端的來源
2.雙向認證,如果客戶端瀏覽器沒有導入客戶端證書,是訪問不了web系統的,找不到地址
如果只是加密,單向就行
如果想要用系統的人沒有證書就訪問不了系統的話,就採用雙向

命令格式:

輸入名字、組織單位、組織、市、省、國家等信息
keytool -genkeypair -alias tomcat -keyalg RSA -keysize 1024 -dname "CN=localhost, OU=Organization, O=Company Name, L=City, S=State, C=US" -validity 365 -keystore  e:/tomcat.keystore

單向配置:
第一步:爲服務器生成證書
使用keytool爲Tomcat生成證書,假定目標機器的域名是“localhost”,keystore文件存放在“C:\OctopusStoreKey\SP2014.keystore”,口令爲“123456”,使用如下命令生成:
keytool -genkey -v -alias SPClient -keyalg RSA -validity 3650 -keystore c:\OctopusStoreKey\SP2014.keystore

keytool -genkey -v -alias SPClient -keyalg RSA -validity 3650 -keystore c:\OctopusStoreKey\SP2014.keystore -dname "CN=localhost,OU=cn,O=cn,L=cn,ST=cn,c=cn" -storepass 123456 -keypass 123456

 

生成安全證書文件
這個SP2014CA.cer是爲了解決不信任時要導入的
keytool -export -alias SP0200 -file c:\OctopusStoreKey\SP2014CA.cer -keystore c:\OctopusStoreKey\SP2014.keystore -validity 3650
然後輸入c:\OctopusStoreKey\SP2014.keystore 中的keystore密碼

keytool -export -alias tomcat -keystore c:\tomcat.keystore -file c:\tomcat.cer -storepass password


打開Tomcat 根目錄下的 /conf/server.xml ,找到如下配置段,修改如下:

<Connector port="8443" protocol="org.apache.coyote.http11.Http11Protocol" SSLEnabled="true"  
               maxThreads="150" scheme="https" secure="true"  
    clientAuth="false" sslProtocol="TLS"  
    keystoreFile="c:\OctopusStoreKey\SP2014.keystore" keystorePass="123456" >

注意:protocol裏面的值,如果用http 1.1,那麼https的鏈接就會打不開
需要在應用程序的web.xml可以加上這句話

<login-config>
	<!-- Authorization setting for SSL -->
	<auth-method>CLIENT-CERT</auth-method>
	<realm-name>Client Cert Users-only Area</realm-name>
</login-config>

<security-constraint>
	<!-- Authorization setting for SSL -->
	<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>

然後啓動tomcat,輸入 https://localhost:8443/
這時打開會彈出一個提示框:證書不可信任,有一個警告,說什麼需要機構頒發。直接導入SP2014CA.cer即可

雙向配置:
第一步:爲服務器生成證書
使用keytool爲Tomcat生成證書,假定目標機器的域名是“localhost”,keystore文件存放在“C:\OctopusStoreKey\SP2014.keystore”,口令爲“123456”,使用如下命令生成:
keytool -genkeypair -alias tomcat -keyalg RSA -keysize 1024 -dname "CN=localhost, OU=Organization, O=Company Name, L=City, S=State, C=US" -validity 365 -keystore  e:/tomcat.keystore

keytool -genkey -v -alias SPClient -keyalg RSA -validity 3650 -keystore c:\OctopusStoreKey\SP2014.keystore -dname "CN=localhost,OU=cn,O=cn,L=cn,ST=cn,c=cn" -storepass 123456 -keypass 123456

第二步:爲客戶端生成證書
下一步是爲瀏覽器生成證書,以便讓服務器來驗證它。爲了能將證書順利導入至IE 和 Firefox ,證書格式應該是 PKCS12 ,因此,使用如下命令生成:
keytool -genkey -v -alias SP0200 -keyalg RSA -storetype PKCS12 -keystore c:\OctopusStoreKey\SP2014.p12(SP0200爲自定義)。

keytool -genkey -v -alias SP0200 -keyalg RSA -storetype PKCS12 -validity 3650 -keystore c:\OctopusStoreKey\SP2014.p12 -dname "CN=SP0200,OU=cn,O=cn,L=cn,ST=cn,c=cn" -storepass 123456 -keypass 123456

雙擊SP2014.p12文件,即可將證書導入至瀏覽器(客戶端)。

第三步:讓服務器信任客戶端證書
由於是雙向SSL認證,服務器必須要信任客戶端證書,因此,必須把客戶端證書添加爲服務器的信任認證。由於不能直接將PKCS12格式的證書庫導入,必須先把客戶端證書導出爲一個單獨的CER文件,使用如下命令:
keytool -export -alias SP0200 -keystore c:\OctopusStoreKey\SP2014.p12 -storetype PKCS12 -storepass 123456 -rfc -file C:\OctopusStoreKey\SP2014SubCA.cer

(SP0200爲自定義與客戶端定義的SP0200要一致,password是你設置的密碼)。通過以上命令,客戶端證書就被我們導出到“C:\OctopusStoreKey\SP2014SubCA.cer”文件了。

下一步,是將該文件導入到服務器的證書庫,添加爲一個信任證書使用命令如下:

     keytool -import -v -file C:\OctopusStoreKey\SP2014SubCA.cer -keystore C:\OctopusStoreKey\SP2014.keystore

通過list命令查看服務器的證書庫,可以看到兩個證書,一個是服務器證書,一個是受信任的客戶端證書:

keytool -list -keystore C:\OctopusStoreKey\SP2014.keystore

第四步:配置Tomcat 服務器
打開Tomcat 根目錄下的 /conf/server.xml ,找到如下配置段,修改如下:
<Connector port="8443" protocol="org.apache.coyote.http11.Http11Protocol" SSLEnabled="true"
               maxThreads="150" scheme="https" secure="true" clientAuth="true" sslProtocol="TLS"
    keystoreFile="C:\OctopusStoreKey\SP2014.keystore" keystorePass="123456"
    truststoreFile="C:\OctopusStoreKey\SP2014.keystore" truststorePass="123456"/>

(SP2014要與生成的服務端證書名一致)

屬性說明:
clientAuth:設置是否雙向驗證,默認爲false,設置爲true代表雙向驗證
keystoreFile:服務器證書文件路徑
keystorePass:服務器證書密碼
truststoreFile:用來驗證客戶端證書的根證書,此例中就是服務器證書
truststorePass:根證書密碼

應用程序的web.xml可以加上這句話:
<login-config>
	<!-- Authorization setting for SSL -->
	<auth-method>CLIENT-CERT</auth-method>
	<realm-name>Client Cert Users-only Area</realm-name>
</login-config>

<security-constraint>
	<!-- Authorization setting for SSL -->
	<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>
<!--
Require HTTPS for everything except /img (favicon) and /css.
-->
<security-constraint>
	<web-resource-collection>
		<web-resource-name>HTTPSOrHTTP</web-resource-name>
		<url-pattern>*.ico</url-pattern>
		<url-pattern>/img/*</url-pattern>
		<url-pattern>/css/*</url-pattern>
	</web-resource-collection>
	<user-data-constraint>
		<transport-guarantee>NONE</transport-guarantee>
	</user-data-constraint>
</security-constraint>
 
測試
在瀏覽器中輸入:https://localhost:8443/,會彈出選擇客戶端證書界面,點擊“確定”,會進入tomcat主頁,地址欄後會有“鎖”圖標,表示本次會話已經通過HTTPS雙向驗證,接下來的會話過程中所傳輸的信息都已經過SSL信息加密。

 

發佈了59 篇原創文章 · 獲贊 1 · 訪問量 7923
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章