1. 程式人生 > >Tomcat伺服器配置https雙向認證

Tomcat伺服器配置https雙向認證

一,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
原文: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生成證書)
原文出自: www.hangge.com   轉載請保留原文連結: http://www.hangge.com/blog/cache/detail_992.html