1. 程式人生 > >tomcat8配置https雙向認證

tomcat8配置https雙向認證

工具準備:keytool(JDK自帶證書生成工具),tomcat8

利用JDK中keyStore生成證書。

前言:

關於HTTPS介紹文章請看此博文,我也是看了他的博文才搞懂的,真心感謝。

博文地址:http://www.cnblogs.com/JeffreySun/archive/2010/06/24/1627247.html

為伺服器生成證書

目標機器域名:localhost

口令:tomcat

過期時間:36500天,預設90天

證書別名:tomcat

在控制檯執行以下命令生成:

keytool -genkey -v -alias tomcat(別名) -keyalg RSA -keystore D:\key\tomcat.keystore(keystore儲存位置)  -validity  36500(有效日期)

填寫注意事項:

A、 輸入keystore密碼:此處需要輸入大於6個字元的字串。

B、 “您的名字與姓氏是什麼?”這是必填項,並且必須是TOMCAT部署主機的域名或者IP[如:abccom或者 127.0.0.1](就是你將來要在瀏覽器中輸入的訪問地址),否則瀏覽器會彈出警告視窗,提示使用者證書與所在域不匹配。在本地做開發測試時,應填入“localhost”。

C、 你的組織單位名稱是什麼?”、“您的組織名稱是什麼?”、“您所在城市或區域名稱是什麼?”、“您所在的州或者省份名稱是什麼?”、“該單位的兩字母國家程式碼是什麼?”可以按照需要填寫也可以不填寫直接回車,在系統詢問“正確嗎?”時,對照輸入資訊,如果符合要求則使用鍵盤輸入字母“y”,否則輸入“n”重新填寫上面的資訊。

D、 輸入<tomcat>(自定義的別名)的主密碼,這項較為重要,會在tomcat配置檔案中使用,建議輸入與keystore的密碼一致,設定其它密碼也可以,完成上述輸入後,直接回車則在你在第二步中定義的位置找到生成的檔案。

為客戶端生成證書

客戶端證書別名:client

儲存位置:D:\key\client.p12

為瀏覽器生成證書,以便讓伺服器來驗證它。為了能將證書順利匯入至IE和Firefox,證書格式應該是PKCS12,因此,使用如下命令生成:

keytool  -genkey-v –alias  client(客戶端證書別名) -keyalg RSA -storetype PKCS12 -keystore D:\key\client.p12(客戶端證書儲存位置)

客戶端的Common Name可以是任意值,其他資訊可為空。

雙擊開啟client.p12檔案,即可將證書匯入至瀏覽器(客戶端)。


讓伺服器信任客戶端證書

由於是雙向SSL認證,伺服器必須要信任客戶端證書,因此,必須把客戶端證書新增為伺服器的信任認證。由於不能直接將PKCS12格式的證書庫匯入,必須先把客戶端證書匯出為一個單獨的CER檔案,使用如下命令:

keytool-export -alias client(客戶端證書別名) -keystore D:\key\client.p12 -storetype PKCS12 -storepass client(你的客戶端keystore密碼) -rfc-file D:\key\clientforserver.cer 

通過以上命令,客戶端證書就被我們匯出到“D:\key\clientforserver.cer”檔案了。

下一步,是將該檔案匯入到伺服器的證書庫,新增為一個信任證書使用命令如下:

keytool -import -v -file D:\key\clientforserver.cer-keystore D:\key\tomcat.keystore

通過list命令檢視伺服器的證書庫,可以看到兩個證書,一個是伺服器證書,一個是受信任的客戶端證書:

keytool -list -keystore D:\key\tomcat.keystore

讓客戶端信任伺服器證書

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

keytool -keystore D:\key\tomcat.keystore -export -alias tomcat(伺服器keystore別名) -file D:\key\CA.cer

生成CA.cer檔案後點擊安裝:


配置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:\\key\\tomcat.keystore"
keystorePass="tomcat"truststoreFile="D:\\key\\tomcat.keystore"
truststorePass="tomcat"/>