1. 程式人生 > >JDK8+Tomcat8配置https

JDK8+Tomcat8配置https

今天在學習Spring Security的時候,Spring Security有一個功能是能夠將一部分URL強制使用HTTPS。因此,就需要讓我們的Tomcat能夠響應HTTPS。現在網上的很多解決方法都是原來版本的軟體來生成金鑰和開啟Tomcat HTTPS功能。到了JDK8和Tomcat8就有一些不適用了。原因是jdk所提供的keytool 工具有些變化。下邊就簡要介紹一下我所用的方法。

生成金鑰對

我比較喜歡金鑰對這個名字,因為它非常明確了HTTPS在傳輸過程中需要的兩個鑰匙(公鑰和私鑰)。如果不太瞭解HTTPS的,可以要到搜尋引擎去搜索一下HTTPS的原理。
首先,確保java的目錄在系統的環境變數中,不在的話,可以直接到java目錄的bin資料夾下操作。
生成金鑰對的命令是keytool -genkeypair,在原先的有的jdk所提供的命令是keytool -genkey,但我感覺jdk8的這種表達更為明確一些。
keytool -genkeypair -alias tomcat -keyalg RSA -keypass password -storepass password -keystore path_to_keystore/name_for_keystore.keystore

-alias 表示證書的別名,一個keystore檔案中可以存放多個alias。
-keyalg RSA 表示金鑰演算法的名稱為RSA演算法
-keypass password表示金鑰的口令是password
-storepass password表示金鑰庫(生成的keystore檔案)的金鑰是keypass。
注意:keypass和storepass理論上是可以不同的,但是我們生成的金鑰是要給tomcat用的,tomcat這傢伙好像沒有提供提取私鑰的密碼(就是上邊那個keypass)配置,因此我們只好將兩個密碼設定成一樣的。
-keystore是生成的或者已有的keystore檔案的位置,如果不提供的話,keytool工具會把它放在使用者目錄下,還起了個名字叫.keystore。


生成金鑰對的介面就和下邊一樣
keytool生成金鑰對

配置Tomcat

好了,現在去配置Tomcat。在Tomcat安裝目錄的conf資料夾下有個server.xml檔案,找到我們需要開啟HTTPS功能的Service,新增一個Connector。關於Tomcat中的這些概念,不懂的可以找個搜尋引擎搜一下(你就搜Tomcat Server.xml)。
Tomcat8中給出了一個預設的Connector,我們只需要把它的註釋去掉就可以了。樣子就像下邊的圖一樣。
server.xml中配置HTTPS
port是埠,protocol是協議,原來低版本的Tomcat版本有可能是”HTTP/1.1”,但是在8這個版本中是一個代表了協議的類。無所謂了。你的是哪個版本就用哪種表述,關鍵看原來的server.xml所給的例子。
keystoreFile是我們剛剛生成的那個keystore檔案,keystorePass就是我們剛才在生成keystore檔案的時候所指定的storepass或keypass(它們是一樣的,原因前邊說啦)。你得注意keystoreFile中的F是大寫的,keystorePass中的P也是大寫的,寫錯了有可能會出問題的。

OK,現在重啟你的tomcat,輸入地址,把埠改成8443,應該就可以訪問了。