生成金鑰對
我比較喜歡金鑰對這個名字,因為它非常明確了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。
生成金鑰對的介面就和下邊一樣
配置Tomcat
好了,現在去配置Tomcat。在Tomcat安裝目錄的conf資料夾下有個server.xml檔案,找到我們需要開啟HTTPS功能的Service,新增一個Connector。關於Tomcat中的這些概念,不懂的可以找個搜尋引擎搜一下(你就搜Tomcat Server.xml)。
Tomcat8中給出了一個預設的Connector,我們只需要把它的註釋去掉就可以了。樣子就像下邊的圖一樣。
<Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol" maxThreads="150" SSLEnabled="true" scheme="https" secure="true" clientAuth="false" sslProtocol="TLS" keystoreFile="G:/software/apache-tomcat-8.0.43-x64/xxx.keystore" keystorePass="xxxx" />
port是埠,protocol是協議,原來低版本的Tomcat版本有可能是”HTTP/1.1”,但是在8這個版本中是一個代表了協議的類。無所謂了。你的是哪個版本就用哪種表述,關鍵看原來的server.xml所給的例子。
keystoreFile是我們剛剛生成的那個keystore檔案,keystorePass就是我們剛才在生成keystore檔案的時候所指定的storepass或keypass(它們是一樣的,原因前邊說啦)。你得注意keystoreFile中的F是大寫的,keystorePass中的P也是大寫的,寫錯了有可能會出問題的。
OK,現在重啟你的tomcat,輸入地址,把埠改成8443,應該就可以訪問了。