工做中使用了銀行接口,須要部署單獨的web服務器,接收https的請求,研究了一下tomcat 6進行雙向https的配置,參考了網上的文章以及不斷的摸索,總算小有心得,這裏簡單的整理和記錄一下。html
一樣使用的是jdk自帶的keytool,廢話很少說,直接上圖,首先進入java_home\bin目錄,執行以下命令:java
keytool -genkey -v -alias tomcat -keyalg RSA -keystore e:\keystore\tomcat.keystore -validity 36500web |
命令的做用是爲服務器生成證書,別名爲tomcat,有效期爲100年,存放在E:\keystore目錄,確認後,還須要填寫一些信息,生成keystore文件,如圖所示:apache
須要注意的是:這裏的名字或姓氏,最好是填寫ip地址或域名,本地也能夠填寫localhosy,填寫其餘的,則須要修改windows的hosts配置。接下來的客戶端證書生成也同樣。windows
一樣的,執行下面的命令生成客戶端的證書,爲了導出IE或FireFoX,證書格式設置爲PKCS12:tomcat
keytool -genkey -v -alias realfighter -key alg RSA -storetype PKCS12 -keystore e:\keystore\realfighter.p12安全 |
與服務端證書生成同樣,也須要填寫一些信息,生成p12文件,以下圖所示:服務器
接下來,經過下面的命令,將p12轉換成cer文件,以下所示,紅色部分爲你設置的客戶端證書密碼:spa
C:\Program Files\Java\jdk1.6.0_45\bin>keytool -export -alias realfighter -keysto re e:\keystore\realfighter.p12 orm -storetype PKCS12 -storepass urpwd -rfc -file e:\keystore\realfighter.cer |
以後,須要將生成的客戶端證書,導入到服務端的證書庫,以下所示:
C:\Program Files\Java\jdk1.6.0_45\bin>keytool -import -v -file e:\keystore\realf ighter.cer -keystore e:\keystore\tomcat.keystore |
接下來,須要進行tomcat的配置,使其支持https訪問, 默認使用443端口,修改tomcat_home\conf\server.xml文件,去除兩個Connector,註釋掉,主要是禁止經過http:8080訪問,以下:
<!-- <Connector executor="tomcatThreadPool" port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" /> --> |
<!-- <Connector port="8009" protocol="AJP/1.3" redirectPort="443" /> --> |
去除84行左右Connector的註釋,修改以下:
<Connector port="443" protocol="org.apache.coyote.http11.Http11Protocol" SSLEnabled="true" maxThreads="150" scheme="https" secure="true" clientAuth="true" sslProtocol="TLS" keystoreFile="e:/keystore/tomcat.keystore" keystorePass="urpwd" truststoreFile="e:/keystore/tomcat.keystore" truststorePass="urpwd" /> |
上面的keystoreFile和truststoreFile對應證書庫和可信任證書庫文件, 這裏使用的是同一個,密碼分別對應服務端密碼和客戶端密碼。
接下來,啓動tomcat,經過https://127.0.0.1/訪問,默認訪問的就是443端口,會出現訪問錯誤的頁面,以下:
咱們須要將客戶端證書p12文件導入,以Google Chrome爲例,在設置-->顯示高級設置-->管理證書-->我的-->導入,以下:
直接下一步,選擇p12文件,一路點下一步,中間須要填寫一下證書的密碼,完成後會在我的部分顯示安裝的證書,如圖所示:
刷新以前的連接,會顯示選擇證書,以下圖,點擊肯定:
會顯示連接不安全,直接忽視,點繼續訪問:
這樣就訪問成功了: