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生成證書)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/198266.html
標籤:AI
