Tomcat配置https加密連接


配置https安全連接(ssl加密連接)

https連接需要用到數字證書與數字簽名(MD5算法),網站https連接首先需要申請數字證書,配置加密連接器,瀏覽器安裝證書。

證書運用到RSA技術,RSA加密算法是一種非對稱加密算法,服務器保留私鑰,對外公開公鑰(cer證書)。

Tomcat秘鑰庫類型為JKS(Java Key Storage),很容易知道這是 JAVA 的專屬格式,利用 JAVA 的一個叫 keytool 的工具可以進行格式轉換。一般用於 Tomcat 服務器。

單向認證

生成服務端秘鑰庫

使用java的工具keytool產生數字證書,tomcat.keystore可以寫在需要生成的路徑。此句是生成tomcat.keystore(需要設置秘鑰庫密碼),並在tomcat.keystore中生成服務端證書私鑰(需要設置私鑰密碼)。

keytool -genkeypair -alias "tomcat" -keyalg "RSA" -keystore "tomcat.keystore" -validity 36500   //生成秘鑰庫,並生成別名為tomcat的私鑰(條目類型PrivateKeyEntry)

參數說明:

-genkeypair:生成一對非對稱密鑰;
-alias:指定密鑰對的別名,該別名是公開的; -keyalg:指定加密算法,本例中的采用通用的RAS加密算法; -keystore:密鑰庫的路徑及名稱,不指定的話,默認在操作系統的用戶目錄下生成一個".keystore"的文件;
-validity:設置秘鑰有效期,單位為天,36500即為100年;

中間根據提示設置密碼(秘鑰庫密碼、服務器證書私鑰密碼),生成文件.keystore。

注意:

  1.密鑰庫的密碼至少必須6個字符,可以是純數字或者字母或者數字和字母的組合等等

  2."名字與姓氏(CN)"應該是輸入域名,而不是我們的個人姓名,本機可用localhost,其他的可以不填

將文件.keystore放到Tomcat服務器的conf目錄下(不移動也可以,在xml中配置時寫指定路徑即可)
cp tomcat.keystore /usr/local/tomcat/server/conf/

根據秘鑰庫生成證書

這里根據keystore中服務端證書的私鑰生成cer的服務端公鑰cer證書。需要輸入秘鑰庫密碼

keytool -export -alias tomcat -keystore tomcat.keystore -rfc -file tomcatserver.cer   //根據keystore秘鑰庫中別名為tomcat的條目(私鑰),生成cer證書(公鑰)

生成的服務端公鑰證書有效期為上面私鑰設置的有效期

參數說明:

-alias tomcat    //要處理的條目的別名(秘鑰庫中的條目)
-keystore tomcat.keystore   //密鑰庫名稱,為剛才導出的秘鑰庫
-rfc    //以 RFC 樣式輸出
-file tomcatserver.cer    //輸出文件名

單向認證配置

在客戶端安裝tomcatserver.cer到受信任的根證書頒發機構;配置server.xml,clientAuth客戶端認證要設置為false。

<Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true" maxThreads="150" scheme="https" 
secure="true" clientAuth="false" sslProtocol="TLS" 
keystoreFile="conf/tomcat.keystore" keystorePass="秘鑰庫密碼"/>

測試

查看證書

IE瀏覽器 -> Internet選項 -> 內容 ->  證書 -> 受信任的根證書頒發機構,找到上面輸入的名字與姓氏(CN)輸入的東西。

 

打開IE測試,發現localhost的進不去,127.0.0.1的可以進去。因為生成證書時名字與姓氏(CN)輸入的127.0.0.1(客戶端訪問服務器端的IP)。

其他常用命令

導入其他的證書到密鑰庫

導入后條目類型為trustedCertEntry,配置文件要配置truststoreFile,這個一般用於客戶端證書(公鑰)的導入。

只是導入了cer證書的私鑰,不含有公鑰,要再根據秘鑰庫中導入的證書alias執行export操作。

keytool -import -file tomcatclient.cer -storepass  -keystore tomcat.keystore -alias aeolian

參數說明:

-file tomcat-client2.cer    //必須,證書文件名稱
-keystore tomcat.keystore    //必須,密鑰庫名稱,創建服務端秘鑰庫的文件
-alias aeolian   //推薦寫,要導入的證書別名(決定此證書導入到秘鑰庫中的別名),不寫默認為mykey,再次導入會提示別名mykey已存在
-storepass    //不推薦寫,密鑰庫密碼。回車后會提示你輸入秘鑰庫密碼

在密鑰庫中刪除條目

這里一般也是刪除受信任的客戶端證書的公鑰

keytool -delete -keystore tomcat.keystore -alias mykey    //刪除秘鑰庫中別名為mykey的條目

修改秘鑰庫中證書條目的口令

keytool -keypasswd -keystore tomcat.keystore -alias mykey  //更改別名為mykey條目的密碼,需要輸入秘鑰庫密碼

查看秘鑰庫內容

keytool -list -v -keystore tomcat.keystore    //要輸入秘鑰庫密碼

查看證書內容

keytool -printcert -file tomcatclient.cer

雙向認證

上面的為服務端證書,在此基礎上,雙向認證還需要客戶端證書。客戶端證書是先生成p12的客戶端私鑰,再根據p12轉成cer,把cer(公鑰)導入keystore並命名alias。

生成PKCS12格式的客戶端證書

為客戶端生成證書,為了讓證書順利導入IE和Firefox,證書格式應該是PKCS12。要輸入客戶端證書密碼。tomcat-client.p12為客戶端私鑰。這里也要輸入CN,和上面服務器證書的CN一樣即可。

keytool -genkey -v -alias tomcatclientp12 -keyalg RSA -storetype PKCS12 -keystore tomcat-client.p12 -validity 3650

讓服務器信任戶端證書

由於是雙向SSL認證,服務器必須要信任客戶端證書.由於不能直接將PKCS12直接將PKCS12的格式的證書導入證書庫,必須先把客戶端證書導出為一個單獨的cer文件,然后再把cer文件導入秘鑰庫。

keytool -export -alias tomcatclientp12 -keystore tomcat-client.p12 -storetype PKCS12 -storepass P12證書秘鑰 -rfc -file tomcat-client-p12.cer  //導出客戶端公鑰,要輸入密碼
keytool -import -v -file tomcat-client-p12.cer -keystore tomcat.keystore -alias tomcatclientpub    //將客戶端證書公鑰導入到服務器的秘鑰庫,並為客戶端公鑰起一個別名

瀏覽器安裝P12證書

IE瀏覽器 -> Internet選項 -> 內容 ->  證書 -> 個人 -> 導入 ->選擇tomcat-client.p12,安裝完成后個人欄顯示即可(p12發現直接安裝雖然顯示成功但是個人欄里面不顯示)。

配置文件

修改conf/server.xml文件,修改加密連接器,添加keystoreFile(服務端證書私鑰)與keystorePass(客戶端證書公鑰),把protocol換為HTTP/1.1。clientAuth表示客戶端是否認證,雙向認證設為true。

<Connector port="9443" protocol="HTTP/1.1" SSLEnabled="true" maxThreads="150" scheme="https" 
secure="true"  clientAuth="true" sslProtocol="TLS" 
keystoreFile="conf/tomcat.keystore" keystorePass="秘鑰庫密碼" 
truststoreFile="conf/tomcat.keystore" truststorePass="秘鑰庫密碼"/>

測試

訪問https://localhost:9443/cas/login依然進不去,因為證書CN不為localhost。

 

訪問https://127.0.0.1:9443/cas/login,首先彈出確認證書信息,點擊確認后可以正常訪問。

 

證書總結

tomcat-client-p12.cer:客戶端證書的公鑰(雙向認證特有,最終導入到tomcat.keystore里面)

tomcat-client.p12:客戶端證書的私鑰(雙向認證特有,客戶端安裝,導入個人證書下面,否則不起作用)

tomcatserver.cer :服務端證書的公鑰(客戶端安裝,受信任的根證書頒發機構下面

tomcat.keystore:服務端證書庫,既包含服務端私鑰,又包含客戶端公鑰(服務器conf下面)

瀏覽器安裝證書

雙擊tomcatserver.cer證書安裝到受信任的根證書頒發機構

Internet導入p12證書到個人證書

最好用IE瀏覽器測試(一般瀏覽器只信任大廠頒發的證書,所以看起來不明顯)。

 

若服務端公鑰不在受信任的根證書頒發機構下面,瀏覽器(IE)訪問時會提示不安全。

若客戶端私鑰證書安裝不在個人下面,可能會出現下面的情況。

Chrome出現:ERR_BAD_SSL_CLIENT_AUTH_CERT

IE出現:無法安全地連接到此頁面 這可能是因為該站點使用過期的或不安全的 TLS 安全設置。如果這種情況持續發生,請與網站的所有者聯系。 TLS 安全設置未設置為默認設置,這也可能導致此錯誤。

雙向認證最終效果圖:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM