Tomcat伺服器配置https雙向認證
阿新 • • 發佈:2018-12-29
一,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目錄
(2)使用keytool為Tomcat生成證書
(引數說明:“G:\tomcat.keystore”含義是將證書檔案的儲存路徑,證書檔名稱是tomcat.keystore;
“-validity 36500”含義是證書有效期,36500表示100年,預設值是90天;“tomcat”為自定義證書名稱)
輸入金鑰庫口令:keystore密碼(假設使用hangge) 您的名字與姓氏是什麼: 必須是TOMCAT部署主機的域名或者IP[如:hangge.com 或者 10.1.25.119](就是你將來要在瀏覽器中輸入的訪問地址),否則瀏覽器會彈出警告視窗,提示使用者證書與所在域不匹配。在本地做開發測試時,應填入“localhost”。
輸入 <tomcat> 的金鑰口令:直接回車
2,生成客戶端證書 為瀏覽器生成證書,以便讓伺服器來驗證它。為了能將證書順利匯入至IE和Firefox,證書格式應該是PKCS12,因此,使用如下命令生成:
假設客戶端證書密碼“123456”,其他隨便填。
3,讓伺服器信任客戶端證書 伺服器要信任客戶端證書,必須把客戶端證書新增為伺服器的信任認證。 (1)由於不能直接將PKCS12格式的證書庫匯入,必須先把客戶端證書匯出為一個單獨的CER檔案,使用如下命令: (下面要用到客戶端證書密碼“123456”)
(2)將該檔案匯入到伺服器的證書庫,新增為一個信任證書使用命令如下:
(3)通過
list
命令檢視伺服器的證書庫,可以看到兩個證書,一個是伺服器證書,一個是受信任的客戶端證書:
4,讓客戶端信任伺服器證書 由於是雙向SSL認證,客戶端也要驗證伺服器證書。把伺服器證書匯出為一個單獨的CER檔案提供給客戶端,使用如下命令:
5,經過上面操作,我們生成如下證書:
三,雙向認證實現步驟2 - 證書的使用
1,伺服器tomcat的配置 開啟Tomcat根目錄下的/conf/server.xml,找到Connector port="8443"配置段,修改為如下:
屬性說明:
clientAuth:設定是否雙向驗證,預設為false,設定為true代表雙向驗證
keystoreFile:伺服器證書檔案路徑
keystorePass:伺服器證書密碼
truststoreFile:用來驗證客戶端證書的根證書,此例中就是伺服器證書
truststorePass:根證書密碼
測試服務端: 瀏覽器輸入https://localhost:8443/ (下圖說明tomcat的https開啟成功。報無效證書沒關係,因為我們客戶端還沒匯入證書)
2,客戶端證書匯入
(1)雙擊“ mykey.p12 ”匯入客戶端證書 再次使用瀏覽器訪問服務端,瀏覽器會讓我們選擇使用的證書。
但由於是自簽名的證書,所以瀏覽器會警告我們不安全,選擇繼續好了:
可以看到能成功訪問了(位址列“證書錯誤”說明目前還沒雙向驗證,不過資料已經是使用HTTPS傳輸了):
(2)匯入伺服器公鑰證書( tomcat.cer) 由於是自簽名的證書,為避免每次都提示不安全。這裡雙擊tomcat.cer安裝伺服器證書。 注意:將證書填入到“受信任的根證書頒發機構”
再次重新訪問伺服器,會發現沒有不安全的提示了,同時瀏覽器位址列上也有個“鎖”圖示,表示本次會話已經通過HTTPS雙向驗證。
原文出自: www.hangge.com 轉載請保留原文連結: http://www.hangge.com/blog/cache/detail_992.html
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
2,TLS/SSL特點 (1)HTTPS在傳輸資料之前需要客戶端(瀏覽器)與服務端(網站)之間進行一次握手,在握手過程中將確立雙方加密傳輸資料的密碼資訊。 (2)TLS/SSL中使用了非對稱加密,對稱加密以及HASH演算法。 其中 非對稱加密演算法用於在握手過程中加密生成的密碼, 對稱加密演算法用於對真正傳輸的資料進行加密,而 HASH演算法用於驗證資料的完整性。 (3)TLS握手過程中如果有任何錯誤,都會使加密連線斷開,從而阻止了隱私資訊的傳輸。
二,雙向認證實現步驟1 - 證書的生成
1,生成伺服器證書 (1)開啟命令控制檯,進入%JAVA_HOME%/bin目錄
1 |
cd
"c:\Program Files\Java\jre1.8.0_60\bin"
|
1 |
keytool -genkey -v -alias tomcat -keyalg RSA -keystore G:\tomcat.keystore -validity
36500
|
輸入金鑰庫口令: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
|
3,讓伺服器信任客戶端證書 伺服器要信任客戶端證書,必須把客戶端證書新增為伺服器的信任認證。 (1)由於不能直接將PKCS12格式的證書庫匯入,必須先把客戶端證書匯出為一個單獨的CER檔案,使用如下命令: (下面要用到客戶端證書密碼“123456”)
1 |
keytool -export -alias mykey -keystore G:\mykey.p12 -storetype PKCS12 -storepass
123456
-rfc -file G:\mykey.cer
|
1 |
keytool -
import
-v -file G:\mykey.cer -keystore G:\tomcat.keystore
|
1 |
keytool -list -keystore G:\tomcat.keystore
|
4,讓客戶端信任伺服器證書 由於是雙向SSL認證,客戶端也要驗證伺服器證書。把伺服器證書匯出為一個單獨的CER檔案提供給客戶端,使用如下命令:
1 |
keytool -keystore G:\tomcat.keystore -export -alias tomcat -file G:\tomcat.cer
|
5,經過上面操作,我們生成如下證書:
三,雙向認證實現步驟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"
/>
|
測試服務端: 瀏覽器輸入https://localhost:8443/ (下圖說明tomcat的https開啟成功。報無效證書沒關係,因為我們客戶端還沒匯入證書)
2,客戶端證書匯入
(1)雙擊“ mykey.p12 ”匯入客戶端證書 再次使用瀏覽器訪問服務端,瀏覽器會讓我們選擇使用的證書。
但由於是自簽名的證書,所以瀏覽器會警告我們不安全,選擇繼續好了:
可以看到能成功訪問了(位址列“證書錯誤”說明目前還沒雙向驗證,不過資料已經是使用HTTPS傳輸了):
(2)匯入伺服器公鑰證書( tomcat.cer) 由於是自簽名的證書,為避免每次都提示不安全。這裡雙擊tomcat.cer安裝伺服器證書。 注意:將證書填入到“受信任的根證書頒發機構”
再次重新訪問伺服器,會發現沒有不安全的提示了,同時瀏覽器位址列上也有個“鎖”圖示,表示本次會話已經通過HTTPS雙向驗證。
原文出自: www.hangge.com 轉載請保留原文連結: http://www.hangge.com/blog/cache/detail_992.html