Tomcat伺服器配置https雙向認證(使用keytool生成證書)

上校發表於2017-03-24
一,HTTPS原理
 
1,HTTP、HTTPS、SSL、TLS介紹與相互關係
(1)HTTP:平時瀏覽網頁時候使用的一種協議。HTTP協議傳輸的資料都是未加密的(明文),因此使用HTTP協議傳輸隱私資訊非常不安全。
(2)HTTPS:為了保證隱私資料能加密傳輸,採用SSL/TLS協議用於對HTTP協議傳輸的資料進行加密,也就是HTTPS。
(3)SSL:SSL(Secure Sockets Layer)協議是由網景公司設計,後被IETF定義在RFC 6101中。目前的版本是3.0。
(4)TLS:TLS可以說是SSL的改進版。是由IETF對SSL 3.0進行了升級而出現的,定義在RFC 2246。實際上我們現在的HTTPS都是用的TLS協議。
 
2,TLS/SSL特點
(1)HTTPS在傳輸資料之前需要客戶端(瀏覽器)與服務端(網站)之間進行一次握手,在握手過程中將確立雙方加密傳輸資料的密碼資訊。
(2)TLS/SSL中使用了非對稱加密,對稱加密以及HASH演算法。
其中非對稱加密演算法用於在握手過程中加密生成的密碼,對稱加密演算法用於對真正傳輸的資料進行加密,而HASH演算法用於驗證資料的完整性。
(3)TLS握手過程中如果有任何錯誤,都會使加密連線斷開,從而阻止了隱私資訊的傳輸。
 
 
二,雙向認證實現步驟1 - 證照的生成
下面演示如何使用 Tomcat 伺服器,通過HTTPS進行雙向認證。證照的話這裡使用 keytool 生成自簽名證照。
(注意:如果真正的商用系統建議使用向CA付費購買的證照。因為如果使用自簽名證照的話,客戶端對伺服器的驗證其實是拋給使用者來判斷(使用者自己決定信任還是不信任))
 

1,生成伺服器證照

(1)開啟命令控制檯,進入%JAVA_HOME%/bin目錄
1
cd "c:\Program Files\Java\jre1.8.0_60\bin"

(2)使用keytool為Tomcat生成證照

1
keytool -genkey -v -alias tomcat -keyalg RSA -keystore G:\tomcat.keystore -validity 36500

(引數說明:“G:\tomcat.keystore”含義是將證照檔案的儲存路徑,證照檔名稱是tomcat.keystore;

“-validity 36500”含義是證照有效期,36500表示100年,預設值是90天;“tomcat”為自定義證照名稱)
原文:Tomcat伺服器配置https雙向認證(使用keytool生成證照)
輸入金鑰庫口令:keystore密碼(假設使用hangge)

您的名字與姓氏是什麼:必須是TOMCAT部署主機的域名或者IP[如:hangge.com 或者 10.1.25.119](就是你將來要在瀏覽器中輸入的訪問地址),否則瀏覽器會彈出警告視窗,提示使用者證照與所在域不匹配。在本地做開發測試時,應填入“localhost”。 

輸入 <tomcat> 的金鑰口令:直接回車
 
2,生成客戶端證照
為瀏覽器生成證照,以便讓伺服器來驗證它。為了能將證照順利匯入至IE和Firefox,證照格式應該是PKCS12,因此,使用如下命令生成:
1
keytool -genkey -v -alias mykey -keyalg RSA -storetype PKCS12 -keystore G:\mykey.p12 -validity 36500
原文:Tomcat伺服器配置https雙向認證(使用keytool生成證照)

 

假設客戶端證照密碼“123456”,其他隨便填。
 
3,讓伺服器信任客戶端證照
伺服器要信任客戶端證照,必須把客戶端證照新增為伺服器的信任認證。
(1)由於不能直接將PKCS12格式的證照庫匯入,必須先把客戶端證照匯出為一個單獨的CER檔案,使用如下命令:
     (下面要用到客戶端證照密碼“123456”)
1
keytool -export -alias mykey -keystore G:\mykey.p12 -storetype PKCS12 -storepass 123456 -rfc -file G:\mykey.cer

(2)將該檔案匯入到伺服器的證照庫,新增為一個信任證照使用命令如下:

1
keytool -import -v -file G:\mykey.cer -keystore G:\tomcat.keystore

(3)通過 list 命令檢視伺服器的證照庫,可以看到兩個證照,一個是伺服器證照,一個是受信任的客戶端證照:

1
keytool -list -keystore G:\tomcat.keystore
原文:Tomcat伺服器配置https雙向認證(使用keytool生成證照)
 
4,讓客戶端信任伺服器證照
由於是雙向SSL認證,客戶端也要驗證伺服器證照。把伺服器證照匯出為一個單獨的CER檔案提供給客戶端,使用如下命令:
1
keytool -keystore G:\tomcat.keystore -export -alias tomcat -file G:\tomcat.cer
 
5,經過上面操作,我們生成如下證照:
原文:Tomcat伺服器配置https雙向認證(使用keytool生成證照)
 
三,雙向認證實現步驟2 - 證照的使用
 
1,伺服器tomcat的配置
開啟Tomcat根目錄下的/conf/server.xml,找到Connector port="8443"配置段,修改為如下:
1
2
3
4
5
<Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"
    SSLEnabled="true" maxThreads="150" scheme="https"
    secure="true" clientAuth="true" sslProtocol="TLS"
    keystoreFile="G:\\tomcat.keystore" keystorePass="hangge"
    truststoreFile="G:\\tomcat.keystore" truststorePass="hangge" />
屬性說明:
clientAuth:設定是否雙向驗證,預設為false,設定為true代表雙向驗證
keystoreFile:伺服器證照檔案路徑
keystorePass:伺服器證照密碼
truststoreFile:用來驗證客戶端證照的根證照,此例中就是伺服器證照
truststorePass:根證照密碼
 
測試服務端:
瀏覽器輸入https://localhost:8443/ (下圖說明tomcat的https開啟成功。報無效證照沒關係,因為我們客戶端還沒匯入證照)
原文:Tomcat伺服器配置https雙向認證(使用keytool生成證照)


2,客戶端證照匯入
(1)雙擊“mykey.p12”匯入客戶端證照

再次使用瀏覽器訪問服務端,瀏覽器會讓我們選擇使用的證照。
原文:Tomcat伺服器配置https雙向認證(使用keytool生成證照)
但由於是自簽名的證照,所以瀏覽器會警告我們不安全,選擇繼續好了:
原文:Tomcat伺服器配置https雙向認證(使用keytool生成證照)
可以看到能成功訪問了(位址列“證照錯誤”說明目前還沒雙向驗證,不過資料已經是使用HTTPS傳輸了):
原文:Tomcat伺服器配置https雙向認證(使用keytool生成證照)
 
(2)匯入伺服器公鑰證照(tomcat.cer)
由於是自簽名的證照,為避免每次都提示不安全。這裡雙擊tomcat.cer安裝伺服器證照。
注意:將證照填入到“受信任的根證照頒發機構”
原文:Tomcat伺服器配置https雙向認證(使用keytool生成證照)
再次重新訪問伺服器,會發現沒有不安全的提示了,同時瀏覽器位址列上也有個“鎖”圖示,表示本次會話已經通過HTTPS雙向驗證。
原文:Tomcat伺服器配置https雙向認證(使用keytool生成證照)

 

 

 

彙總命令:

1.生成伺服器證照
keytool -genkey -v -alias tomcat -keyalg RSA -keystore E:\cert\tomcat.keystore -validity 36500

2.生成客戶端證照
keytool -genkey -v -alias mykey -keyalg RSA -storetype PKCS12 -keystore E:\cert\mykey.p12 -validity 36500

3.讓伺服器信任客戶端證照
(1)客戶端證照匯出為一個單獨的CER檔案
keytool -export -alias mykey -keystore E:\cert\mykey.p12 -storetype PKCS12 -storepass 123456 -rfc -file E:\cert\mykey.cer

(2)將該檔案匯入到伺服器的證照庫,新增為一個信任證照使用命令如下:
keytool -import -v -file E:\cert\mykey.cer -keystore E:\cert\tomcat.keystore

(3)通過 list 命令檢視伺服器的證照庫
keytool -list -keystore E:\cert\tomcat.keystore

4,匯出伺服器證照,用於讓客戶端信任 keytool -keystore E:\cert\tomcat.keystore -export -alias tomcat -file E:\cert\tomcat.cer

 

原文出自:www.hangge.com  轉載請保留原文連結:http://www.hangge.com/blog/cache/detail_992.html

相關文章