前言:最近一直在做等保測評,其中有一項要求就是需要將應用系統使用https加密方式進行通信。
工具:apache-tomcat-7.0.79、jdk1.7、瀏覽器 google 或者 ie
一、https和http的區別
1. http 是超文本傳輸協議,信息是明文傳輸;https則是具有安全性的ssl加密傳輸協議。
2. http和https使用的是完全不同的連接方式,http用的是80端口, https用的是443端口。
二、自簽名證書
自簽名證書就是自己生成的證書,不是官方生成的證書,官方證書需要交費。
另外keytool生成的安全證書不能使用IP,一律使用域名,由於我這里是測試,所以將由localhost代替。
三、使用JDK自帶工具keyTool生成自簽發證書
1. 為服務器生成證書
打開CMD命令,cd到jdk的bin目錄下,或者先到bin目錄下,按住shift右鍵在此處打開命令窗口
使用keytool命令生成證書
keytool
-genkey
-alias tomcat(別名)
-keypass 123456(別名密碼)
-keyalg RSA(算法)
-keysize 1024(密鑰長度)
-validity 365(有效期,天單位)
-keystore D:/keys/tomcat.keystore(指定生成證書的位置和證書名稱)
-storepass 123456(獲取keystore信息的密碼)
keytool -genkey -alias tomcat -keypass 123456 -keyalg RSA -keysize 1024 -validity 365 - keystore D:/keys/tomcat.keystore -storepass 123456
注意在生成之前需要在D盤建一個文件夾keys,要不然會找不到這個文件夾

2. 為客戶端生成證書
為瀏覽器生成證書,以便讓服務器來驗證它。
keytool -genkey -alias client1 -keypass 123456 -keyalg RSA -keysize 1024 -validity 365 -storetype PKCS12 -keystore D:/keys/client1.p12 -storepass 123456


四、讓服務器信任客戶端證書
1. 由於不能直接將PKCS12格式的證書庫導入,必須先把客戶端證書導出為一個單獨的CER文件,使用如下命令:
keytool -export -alias client1 -keystore D:/keys/client1.p12 -storetype PKCS12 -keypass 123456 -file D:/keys/client1.cer


2. 將該文件導入到服務器的證書庫,添加為一個信任證書:
keytool -import -v -file D:/keys/client1.cer -keystore D:/keys/tomcat.keystore -storepass 123456

五、讓客戶端信任服務器證書
1. 由於是雙向SSL認證,客戶端也要驗證服務器證書,因此,必須把服務器證書添加到瀏覽器的“受信任的根證書頒發機構”。由於不能直接將keystore格式的證書庫導入,必須先把服務器證書導出為一個單獨的CER文件,使用如下命令:
keytool -keystore D:/keys/tomcat.keystore -export -alias tomcat -file D:/keys/server.cer
2. 雙擊server.cer文件,按照提示安裝證書,將證書填入到“受信任的根證書頒發機構”。


導入成功后在瀏覽器操作,這里以谷歌瀏覽器為例:

高級設置——HTTPS/SSL——管理證書

把中級證書頒發機構里的localhost(該名稱即時你前面生成證書時填寫的名字與姓氏)證書導出來-再把導出來的證書導入 受信任的根頒發機構 就OK了。

六、配置tomcat服務器
<Connector port="8443"
protocol="org.apache.coyote.http11.Http11NioProtocol" SSLEnabled="true"
maxThreads="150"
scheme="https"
secure="true"
clientAuth="true"
sslProtocol="TLS"
keystoreFile="D:/keys/tomcat.keystore"
keystorePass="123456"
truststoreFile="D:/keys/tomcat.keystore"
truststorePass="123456" />
屬性說明:
clientAuth:設置是否雙向驗證,默認為false,設置為true代表雙向驗證
keystoreFile:服務器證書文件路徑
keystorePass:服務器證書密碼
truststoreFile:用來驗證客戶端證書的根證書,此例中就是服務器證書
truststorePass:根證書密碼
【版權聲明】轉載請注明出處:http://www.cnblogs.com/hsjava1/p/8991173.html
