使用Tomcat伺服器、IE瀏覽器設定https雙向認證

2020-11-01 13:00:54

keytool、Tomcat伺服器、IE瀏覽器設定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握手過程中如果有任何錯誤,都會使加密連線斷開,從而阻止了隱私資訊的傳輸。

步驟如下

keytool自簽證書生成、匯入tomcat伺服器、瀏覽器認證

keytool自簽證書生成

前提需要設定java環境,具體方法可以借鑑java環境設定。keytool生成證書的命令學習如下keytool學習總結

網上給出許多不同生成證書格式的案例,如果對下文有意見,建議可以學習這些格式的區別。CSR檔案 和 PEM 檔案什麼區別

現在需要我們本次證書的生成樣例:

1.開啟cmd命令列輸入

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

(引數說明:「D:\tomcat.keystore」含義是將證書檔案的儲存路徑,證書檔名稱是tomcat.keystore;
「-validity 36500」含義是證書有效期,36500表示100年,預設值是90天;「tomcat」為自定義證書名稱)

2.輸入金鑰庫口令:keystore密碼(假設使用hangge)
您的名字與姓氏是什麼:必須是TOMCAT部署主機的域名或者IP(就是你將來要在瀏覽器中輸入的存取地址),否則瀏覽器會彈出警告視窗,提示使用者證書與所在域不匹配。在本地做開發測試時,應填入「localhost」。輸入 的金鑰口令:直接回車

3.為瀏覽器生成證書,以便讓伺服器來驗證它。為了能將證書順利匯入至IE,證書格式應該是PKCS12,因此,使用如下命令生成:

keytool -genkey -v -alias mykey -keyalg RSA -storetype PKCS12 -keystore D:\mykey.p12

假設使用者端證書密碼「123456」,其他隨便填。

4.讓伺服器信任使用者端證書,伺服器要信任使用者端證書,必須把使用者端證書新增為伺服器的信任認證。
(1)由於不能直接將PKCS12格式的證書庫匯入,必須先把使用者端證書匯出為一個單獨的CER檔案,使用如下命令:(下面要用到使用者端證書密碼「123456」)

keytool -export -alias mykey -keystore D:\mykey.p12 -storetype PKCS12 -storepass 123456 -rfc -file D:\mykey.cer

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

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

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

keytool -list -keystore D:\tomcat.keystore

5.讓使用者端信任伺服器證書
由於是雙向SSL認證,使用者端也要驗證伺服器證書。把伺服器證書匯出為一個單獨的CER檔案提供給使用者端,使用如下命令:

keytool -keystore D:\tomcat.keystore -export -alias tomcat -file D:\tomcat.cer

以下為準備工作:生成的證書
在這裡插入圖片描述

匯入tomcat伺服器

首先需要準備Tomcat伺服器,我個人下載的是8.5版本。下載以及設定可以借鑑Tomcat的下載與安裝。如果是第一次使用Tomcat,啟動需要開啟安裝目錄同意管理員許可權(可能是我個人的防火牆設定原因),後續使用configure tomcat,下面有start、與stop等選項,即開啟與關閉伺服器。瀏覽器開啟預設的localhost:8080可以確認自己的Tomcat是否設定成功。

1.開啟Tomcat的安裝目錄,找到conf下的server.xml檔案找到如下程式碼段
在這裡插入圖片描述
修改為(建議不刪除原來的註釋段,可以把註釋段複製出來再修改,避免沒有記住原先程式碼。其次如果修改server.xml檔案格式錯誤,可能導致Tomcat伺服器重新啟動失敗!也建議修改前存一個server.xml原備份

<Connector  port = "8443"  protocol = "org.apache.coyote.http11.Http11NioProtocol"
     SSLEnabled = "true"  maxThreads = "150"  scheme = "https"
     secure = "true"  clientAuth = "true"  sslProtocol = "TLS"
     keystoreFile = "D:\tomcat.keystore"  keystorePass = "hangge"
     truststoreFile = "D:\tomcat.keystore"  truststorePass = "hangge"  />

屬性說明:
clientAuth:設定是否雙向驗證,預設為false,設定為true代表雙向驗證 keystoreFile:伺服器證書檔案路徑
keystorePass:伺服器證書密碼 truststoreFile:用來驗證使用者端證書的根證書,此例中就是伺服器證書
truststorePass:根證書密碼

2.這裡在操作的時候,由於先前網上給出的案例非常多,也學習了一些,比如8443埠與443埠的區別。這裡由於Tomcat的版本問題等等,設定非常容易導致瀏覽器出現「頁面丟失無法存取」,也請耐心偵錯自己的server.xml檔案。

3.在學習過程中,也可以嘗試http往https的自動跳轉,即在conf下的web.xml檔案格式的</welcome-file-list>後面加上這樣一段

<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>

瀏覽器認證

我嘗試的是電腦的IE瀏覽器,簡單的自簽證書由於涉及安全性不高,Chrome等瀏覽器存取很可能導致失敗(顯示「證書無效」)。

1.瀏覽器輸入https://localhost:8443/ (下圖說明tomcat的https開啟成功。報無效證書沒關係,因為我們使用者端還沒匯入證書)
在這裡插入圖片描述
2.匯入使用者端證書。工具-》internet選項-》內容-》證書-》個人-》匯入,點選下一步,選擇mykey.p12檔案
在這裡插入圖片描述
密碼輸入之前設定的使用者端證書密碼「123456」,之後一直點選下一步、確定。

3.重新啟動瀏覽器開啟https://localhost:8443/,會顯示下圖,在這裡插入圖片描述
4.點選允許,顯示設定使用者端的證書成功。
可以看到能成功存取了(位址列「證書錯誤」說明目前還沒雙向驗證,不過資料已經是使用HTTPS傳輸了)
在這裡插入圖片描述
5.匯入伺服器公鑰證書(tomcat.cer)
由於是自簽名的證書,為避免每次都提示不安全。這裡雙擊tomcat.cer安裝伺服器證書。
注意:將證書填入到「受信任的根證書頒發機構」。再次重新存取伺服器,會發現沒有不安全的提示了,同時瀏覽器位址列上也有個「鎖」圖示,表示本次對談已經通過HTTPS雙向驗證。點選頁面重新整理旁邊的「鎖」,即可檢視自己設定的證書。

學習主要借鑑文章Tomcat伺服器設定https雙向認證(使用keytool生成證書)