之前寫了一篇博文,用tomcat和jdk 的keytools搭建https環境,可是是屬於單向驗證的,若是本身須要的環境是單向驗證的環境,能夠參考 用tomcat搭建https算法
keytool參數解釋shell
keytool -genkeyapache
-alias 證書別名瀏覽器
-keypass 證書密碼 tomcat
-keyalg 所使用的加密算法,例如:RSA安全
-keysize 祕鑰長度,例如1024服務器
-validity 有效期,以天爲單位,默認是90天app
-keystore 指定生成證書的位置和證書名稱工具
-storepass 獲取keystore信息的密碼測試
利用keytool工具生成證書
在此示例中,個人密碼使用的bkyapp
第一步:爲服務器生成證書
keytool -genkey -alias tomcat -keyalg RSA -keysize 1024 -validity 365 -keystore D:/certs/server.keystore
注意:您的姓氏名字這個是必填項,當在本機測試的時候能夠填寫localhost,可是當時生產環境中,必須填寫域名或者IP,例如www.baidu.com,要否則瀏覽器會彈出警告信息,提示用戶證書和所在域不匹配
第二步:爲客戶端生成證書
keytool -genkey -alias mykey -keyalg RSA -storetype PKCS12 -keypass bkyapp -storepass bkyapp -keystore D:/certs/client.p12
生成客戶端證書之後,雙擊client.p12文件,而後安裝到可信任的第三方發佈者列表中便可
第三步:讓服務端信任客戶端證書
keytool -export -alias mykey -keystore D:/certs/client.p12 -storetype PKCS12 -keypass bkyapp -file D:certs/client.cer
因爲服務端並不認識p12格式的客戶端證書,因此須要把客戶端證書轉化爲cer格式
keytool -import -v -file D:/certs/client.cer -keystore D:/certs/server.keystore
以上命令,導入客戶端證書client.cer 到server.keystore文件中,
此時能夠運行 keytool -list -v -keystore D:/certs/server.keystore 查看server.keystore中有幾個證書
C:\Program Files\Java\jdk1.8.0_40\bin>keytool -list -v -keystore D:/certs/server.keystore 輸入密鑰庫口令: 密鑰庫類型: JKS 密鑰庫提供方: SUN 您的密鑰庫包含 2 個條目 別名: tomcat 建立日期: 2016-2-27 條目類型: PrivateKeyEntry 證書鏈長度: 1 證書[1]: 全部者: CN=localhost, OU=Unknown, O=Unknown, L=Unknown, ST=Unknown, C=Unknown 發佈者: CN=localhost, OU=Unknown, O=Unknown, L=Unknown, ST=Unknown, C=Unknown 序列號: 2feeb67a 有效期開始日期: Sat Feb 27 00:15:17 CST 2016, 截止日期: Sun Feb 26 00:15:17 CST 2017 證書指紋: MD5: 8F:CD:23:13:3F:DE:11:34:FB:1A:13:3A:63:7A:A8:C2 SHA1: 5A:86:8B:8E:F3:8A:0D:54:6A:5D:05:F7:C5:C6:B9:6E:42:C2:9A:6B SHA256: 85:29:0C:8C:17:9B:4E:FB:2D:1E:98:4B:CF:05:9D:B5:7B:DA:62:88:C6:DC:5F:5D:F0:FC:EA:7D:B1:D1:8D:1D 簽名算法名稱: SHA256withRSA 版本: 3 擴展: #1: ObjectId: 2.5.29.14 Criticality=false SubjectKeyIdentifier [ KeyIdentifier [ 0000: 3D B0 2F CD 1C 55 EF F9 3D 55 A5 79 1E A9 48 7F =./..U..=U.y..H. 0010: C6 6C F5 77 .l.w ] ]
能夠看出祕鑰庫中包含了兩個條目
第四步:讓客戶端信任服務器證書
keytool -keystore D:/certs/server.keystore -export -alias tomcat -file D:/certs/server.cer
因爲瀏覽器是不認keystore格式的證書的,因此要把服務器的keystore格式的正式轉化爲cer證書,證書生成之後,雙擊server.cer證書,而後安裝到「受信任的根證書頒發機構」中
以上過程總共生成四個文件,四個文件以下圖:
總結下來,證書的生成也就是五條命令,若是不想讀上面過程的話,直接按照次序運行下面五條命令便可:
keytool -genkey -alias tomcat -keyalg RSA -keysize 1024 -validity 365 -keystore D:/certs/server.keystore keytool -genkey -alias mykey -keyalg RSA -storetype PKCS12 -keystore D:/certs/client.p12 keytool -export -alias mykey -keystore D:/certs/client.p12 -storetype PKCS12 -file D:/certs/client.cer keytool -import -v -file D:/certs/client.cer -keystore D:/certs/server.keystore keytool -keystore D:/certs/server.keystore -export -alias tomcat -file D:/certs/server.cer
修改tomcat根目錄下conf文件夾下的server.conf文件,默認狀況下,8443端口是關閉的,下面這段代碼是被註釋掉的,打開而後進行配置便可
<Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol" maxThreads="150" SSLEnabled="true" scheme="https" secure="true" clientAuth="true" sslProtocol="TLS" keystoreFile="D:/certs/server.keystore" keystorePass="bkyapp" truststoreFile="D:/certs/server.keystore" truststorePass="bkyapp" />
clientAuth 表示是否對客戶端進行校驗,若是設置爲false,則配置的是單向驗證,即客戶端對服務器作驗證,可是服務器並不對客戶端驗證,只有把clientAuth設置爲true,纔是雙向驗證,而後設置keystoreFile和truststoreFile的位置和密碼
修改完畢之後,啓動tomcat訪問localhost:8443便可
經過chrom瀏覽器訪問,能夠在地址欄看到一個鎖的小圖標
若是你按照上面步驟作,而且最後看到正確的結果,過程不想看的話,下面的就不須要再看了,若是想看一下我操做的過程,能夠接着往下閱讀
一、生成證書的整個shell文件
C:\Program Files\Java\jdk1.8.0_40\bin>keytool -genkey -alias tomcat -keyalg RSA -keysize 1024 -validity 365 -keystore D:/certs/server.keystore 輸入密鑰庫口令: 再次輸入新口令: 您的名字與姓氏是什麼? [Unknown]: localhost 您的組織單位名稱是什麼? [Unknown]: 您的組織名稱是什麼? [Unknown]: 您所在的城市或區域名稱是什麼? [Unknown]: 您所在的省/市/自治區名稱是什麼? [Unknown]: 該單位的雙字母國家/地區代碼是什麼? [Unknown]: CN=localhost, OU=Unknown, O=Unknown, L=Unknown, ST=Unknown, C=Unknown是否正確? [否]: y 輸入 <tomcat> 的密鑰口令 (若是和密鑰庫口令相同, 按回車): C:\Program Files\Java\jdk1.8.0_40\bin>keytool -genkey -alias mykey -keyalg RSA -storetype PKCS12 -keystore D:/certs/client.p12 輸入密鑰庫口令: 再次輸入新口令: 您的名字與姓氏是什麼? [Unknown]: localhost 您的組織單位名稱是什麼? [Unknown]: 您的組織名稱是什麼? [Unknown]: 您所在的城市或區域名稱是什麼? [Unknown]: 您所在的省/市/自治區名稱是什麼? [Unknown]: 該單位的雙字母國家/地區代碼是什麼? [Unknown]: CN=localhost, OU=Unknown, O=Unknown, L=Unknown, ST=Unknown, C=Unknown是否正確? [否]: y C:\Program Files\Java\jdk1.8.0_40\bin>keytool -export -alias mykey -keystore D:/certs/client.p12 -storetype PKCS12 -file D:/certs/client.cer 輸入密鑰庫口令: 存儲在文件 <D:/certs/client.cer> 中的證書 C:\Program Files\Java\jdk1.8.0_40\bin>keytool -import -v -file D:/certs/client.cer -keystore D:/certs/server.keystore 輸入密鑰庫口令: 全部者: CN=localhost, OU=Unknown, O=Unknown, L=Unknown, ST=Unknown, C=Unknown 發佈者: CN=localhost, OU=Unknown, O=Unknown, L=Unknown, ST=Unknown, C=Unknown 序列號: 1896b2e8 有效期開始日期: Sat Feb 27 00:16:58 CST 2016, 截止日期: Fri May 27 00:16:58 CST 2016 證書指紋: MD5: A8:72:9E:8E:55:E0:20:D4:19:98:4A:59:4E:7A:61:71 SHA1: 13:9E:CB:4A:1F:1B:BB:62:DB:A4:C8:ED:9D:1B:EF:9B:FB:DA:AF:BD SHA256: 3F:88:F4:E3:32:0F:07:0A:08:E0:C1:EB:56:47:4B:9A:99:F2:2C:4D:63:77:44:18:97:CE:0E:73:6F:C4:71:B7 簽名算法名稱: SHA256withRSA 版本: 3 擴展: #1: ObjectId: 2.5.29.14 Criticality=false SubjectKeyIdentifier [ KeyIdentifier [ 0000: DC 66 45 59 38 B7 06 C6 2D 64 8A 53 4C E9 A2 8F .fEY8...-d.SL... 0010: 07 8A 04 E7 .... ] ] 是否信任此證書? [否]: y 證書已添加到密鑰庫中 [正在存儲D:/certs/server.keystore] C:\Program Files\Java\jdk1.8.0_40\bin>keytool -keystore D:/certs/server.keystore -export -alias tomcat -file D:/certs/server.cer 輸入密鑰庫口令: 存儲在文件 <D:/certs/server.cer> 中的證書 C:\Program Files\Java\jdk1.8.0_40\bin>keytool -list -v -keystore D:/certs/server.keystore 輸入密鑰庫口令: 密鑰庫類型: JKS 密鑰庫提供方: SUN 您的密鑰庫包含 2 個條目 別名: tomcat 建立日期: 2016-2-27 條目類型: PrivateKeyEntry 證書鏈長度: 1 證書[1]: 全部者: CN=localhost, OU=Unknown, O=Unknown, L=Unknown, ST=Unknown, C=Unknown 發佈者: CN=localhost, OU=Unknown, O=Unknown, L=Unknown, ST=Unknown, C=Unknown 序列號: 2feeb67a 有效期開始日期: Sat Feb 27 00:15:17 CST 2016, 截止日期: Sun Feb 26 00:15:17 CST 2017 證書指紋: MD5: 8F:CD:23:13:3F:DE:11:34:FB:1A:13:3A:63:7A:A8:C2 SHA1: 5A:86:8B:8E:F3:8A:0D:54:6A:5D:05:F7:C5:C6:B9:6E:42:C2:9A:6B SHA256: 85:29:0C:8C:17:9B:4E:FB:2D:1E:98:4B:CF:05:9D:B5:7B:DA:62:88:C6:DC:5F:5D:F0:FC:EA:7D:B1:D1:8D:1D 簽名算法名稱: SHA256withRSA 版本: 3 擴展: #1: ObjectId: 2.5.29.14 Criticality=false SubjectKeyIdentifier [ KeyIdentifier [ 0000: 3D B0 2F CD 1C 55 EF F9 3D 55 A5 79 1E A9 48 7F =./..U..=U.y..H. 0010: C6 6C F5 77 .l.w ] ] ******************************************* ******************************************* 別名: mykey 建立日期: 2016-2-27 條目類型: trustedCertEntry 全部者: CN=localhost, OU=Unknown, O=Unknown, L=Unknown, ST=Unknown, C=Unknown 發佈者: CN=localhost, OU=Unknown, O=Unknown, L=Unknown, ST=Unknown, C=Unknown 序列號: 1896b2e8 有效期開始日期: Sat Feb 27 00:16:58 CST 2016, 截止日期: Fri May 27 00:16:58 CST 2016 證書指紋: MD5: A8:72:9E:8E:55:E0:20:D4:19:98:4A:59:4E:7A:61:71 SHA1: 13:9E:CB:4A:1F:1B:BB:62:DB:A4:C8:ED:9D:1B:EF:9B:FB:DA:AF:BD SHA256: 3F:88:F4:E3:32:0F:07:0A:08:E0:C1:EB:56:47:4B:9A:99:F2:2C:4D:63:77:44:18:97:CE:0E:73:6F:C4:71:B7 簽名算法名稱: SHA256withRSA 版本: 3 擴展: #1: ObjectId: 2.5.29.14 Criticality=false SubjectKeyIdentifier [ KeyIdentifier [ 0000: DC 66 45 59 38 B7 06 C6 2D 64 8A 53 4C E9 A2 8F .fEY8...-d.SL... 0010: 07 8A 04 E7 .... ] ] ******************************************* *******************************************
二、不啓用對客戶端驗時,客戶端顯示出來的消息
首先會報警,說是否是安全鏈接,而後點擊高級,強制訪問的話,也是能夠訪問的,可是在瀏覽器地址欄https會被劃掉
三、在tomcat中開啓客戶端校驗,可是客戶端未導入證書時,服務器地址會沒法訪問,出現客戶端驗證失敗
另外附上我生成的certs文件
你也能夠直接下載的certs文件,部署到本機的tomcat下面,訪問localhost