1. 程式人生 > >tomcat------https單向認證和雙向認證

tomcat------https單向認證和雙向認證

 一、https分為單向認證和雙向認證:

單向認證就是說,只有客戶端使用ssl時對伺服器端的證書進行認證,也就是說,客戶端在請求建立之前,伺服器端會向客戶端傳送一個證書,一般情況下,這種證書都是由自己或企業自行釋出的,所以在客戶端使用https時,會跳出“是否信任並繼續”,點選信任則表示客戶端信任伺服器端證書,才可以繼續互動。

雙向認證,就是伺服器端和客戶端都對雙方的證書進行認證,這時除了單向認證外,還需要在伺服器端的受信任證書列表中加入客戶端的證書,這樣伺服器端才能信任客戶端的請求。

二、配置:

1.單向認證配置:

 (1)首先使用keytool生成服務端金鑰倉庫,命令: keytool -genkey -keyalg RSA -alias tomcatsso -dname "CN=localhost" -keystore d:\tomcatsso.keystore -storepass changeit

      命令引數-genkey表示是要生成新的金鑰庫,keyalg表示使用的金鑰生成演算法是RSA,alias表示別名,keystore表示生成的金鑰庫儲存在什麼地方,檔案格式可以自定義,-storepass是表示金鑰庫的密碼。

   該步驟生成了一個金鑰庫,該金鑰庫包含私鑰和公鑰等檔案。把它用於伺服器端的證書庫,用於客戶端瀏覽器認證服務端。

(2)開啟tomcat對ssl的支援,具體方法是去掉 <Connector port="8443"...>這一段的註釋,並在本段的末尾加上keystoreFile="d:\tomcatsso.keystore" keystorePass="changeit"這兩個屬性,這兩個屬性會告訴tomcat去哪兒尋找伺服器端金鑰庫。重啟tomcat,至此tomcat對https的修改完成。

 (3) 客戶端也要驗證伺服器證書,因此,必須把伺服器證書新增到瀏覽的“受信任的根證書頒發機構”。由於不能直接將keystore格式的證書庫匯入,必須先把伺服器證書匯出為一個單獨的.cer或.crt檔案,使用如下命令: 

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

  然後雙擊D:\home\tomcat.cer檔案,選擇安裝到“受信任的根證書頒發機構”下面。

 2.雙向認證配置:

 (1) 為客戶端(即IE或firefox)生成證書庫,以便讓伺服器來驗證它。為了能將證書順利匯入至IE和Firefox,證書庫格式應該是PKCS12,即生成證書的時候storetype是PKCS12。因此,使用如下命令生成:

        keytool -genkey -v -alias client -keyalg RSA -storetype PKCS12 -keystore D:\home\client.keys 

       客戶端的CN可以是任意值。

(2)在客戶端安裝證書庫。注意:不能匯入.cer或者.crt格式檔案,因為它會把這些檔案當做服務端的認證檔案,單向認證自動安裝。

(3)讓服務端信任客戶端證書,由於不能直接將PKCS12格式的證書庫匯入,必須先把伺服器證書匯出為一個單獨的.cer或.crt檔案,

        匯出的客戶端證書匯入服務端受信任的證書庫,該命令表示伺服器端信任該證書,命令:keytool -import -alias tomcatsso -file D:\home\client.cer -keystore D:\home\client.trustkeys ,不必先建client.trustkeys庫;

        或者匯入預設的伺服器端信任證書庫,命令:keytool -import -alias tomcatsso -file D:\home\client.cer -keystore "%java_home%/jre/lib/security/cacerts" -storepass changeit

這裡的java_home是tomcat使用的jdk的位置,"%java_home%/jre/lib/security/cacerts"的 cacerts是個無後綴檔案,表示伺服器認證客戶端時使用的根證書庫。