jdk證書生成原理?
TomCAt服務器配置HTTPS雙向認證,使用JDK的keytool生成證書(適用于web、安卓、IOS)
一、原理
1.HTTP:平時瀏覽網頁時候使用的一種協議。HTTP協議傳輸的數據都是未加密的(明文),因此使用HTTP協議傳輸隱私信息非常不安全。
2.HTTPS:為了保證隱私數據能加密傳輸,采用SSL/TLS協議用于對HTTP協議傳輸的數據進行加密,也就是HTTPS。
二、說明
1.原因:因有些情況使用到HTTPS也就是SSL證書驗證以便加密信息,所以使用證書
2.選擇性:自簽免費,不需要金額,CA的收費每年都要給錢的,具體多少沒有關注
3.途徑:有多種,本人找到了兩種,一個的本篇文章敘述的JDK自帶的。,還有一個是OPENSSL可以做的。這里不體現出來。
4.生成環境與工具:windows.jdk1.8,tomcat8
三、步驟
1.服務器證書
1.1進入到jdk中jre目錄控制臺中;
可以在jre文件中按住shift+鼠標右鍵打開控制臺命令
或者cmd命令cd C:\Program Files\java\jre1.8.0_91\bin
1.2.通過keytool命令生成服務端證書(庫)
keytool -genkey -v -alias server -keyalg RSA -keystore G:\server.keystore -validity 36500
參數說明:G:\server.keystore:將名為server.keystore的證書保存到G盤目錄下
-validity 36500:證書有效期,36500表示100年,默認值是90天
server:自定義證書名稱
在這里插入圖片描述
輸入密鑰庫口令:keystore密碼(假設使用123456)此密碼是隱式性的,所以看不到
您的名字與姓氏是什么:必須是TOMCAT部署主機的域名或者IP[如:123456.com 或者 1192.168.0.1](就是你將來要在瀏覽器中輸入的訪問地址),
否則瀏覽器會彈出警告窗口,提示用戶證書與所在域不匹配。在本地做開發測試時,應填入“localhost”。
其他的可以隨意填寫目前沒有出現什么特別情況
輸入 的密鑰口令:直接回車.
2.客戶端證書
2.1證書格式應該是PKCS12,以及jks模式。這第一個P12證書是給瀏覽器和IOS客戶端驗證用的,而安卓不能用keystore的密碼庫所以要生成jks然后通過工具轉換成bks。
2.1.1以下是生產安卓端所用的jks文件
keytool -genkeypair -alias client -keyalg RSA -validity 36500 -keypass 123456 -storepass 123456 -keystore G:\client.jks
在這里插入圖片描述
其中:-keypass 123456 表示密碼是123456(轉換時需要用到)其他的同上。
2.1.2生成p12文件
keytool -genkey -v -alias mykey -keyalg RSA -storetype PKCS12 -keystore G:\mykey.p12
在這里插入圖片描述
相關信息同上,密碼這邊假設是123456
3.讓服務器信任客戶端證書
3.1由于不能直接將PKCS12格式以及jks格式的的證書庫導入,必須先把客戶端證書導出為一個單獨的CER文件,使用如下命令: (下面要用到客戶端證書密碼“123456”)
P12生成cer
keytool -export -alias mykey -keystore G:\mykey.p12 -storetype PKCS12 -storepass 123456 -rfc -file G:\mykey.cer
jks 生成 cer
keytool -export -alias client -file G:\client.cer -keystore G:\client.jks -storepass 123456
3.2將證書導入到服務器的證書庫中
p12轉換的cer導入到server庫中
keytool -import -v -file G:\mykey.cer -keystore G:\server.keystore
將jks轉換的cer導入到server庫中
keytool -import -v -alias client -file G:\client.cer -keystore G:\server.keystore -storepass 123456
4.雙向驗證
由于是雙向SSL認證,客戶端也要驗證服務器證書。把服務器證書導出為一個單獨的CER文件提供給客戶端,使用如下命令:
keytool -keystore G:\server.keystore -export -alias server -file G:\server.cer
至此證書生成完成
3.證書的使用配置
3.1瀏覽器服務器配置
3.1.1服務器tomcat的配置
打開Tomcat根目錄下的/conf/server.xml,找到Connector port="8443"配置段,修改為如下:
clientAuth:設置是否雙向驗證,默認為false,設置為true代表雙向驗證
keystoreFile:服務器證書文件路徑
keystorePass:服務器證書密碼
truststoreFile:用來驗證客戶端證書的根證書,此例中就是服務器證書
truststorePass:根證書密碼
瀏覽器輸入https://192.168.0.1/8443 則會報無效證書或者鏈接不安(證書沒有配置)
3.1.2雙擊“mykey.p12”導入客戶端證書
再次使用瀏覽器訪問服務端,瀏覽器會讓我們選擇使用的證書。
3.1.3.導入服務器公鑰證書(server.cer)
由于是自簽名的證書,為避免每次都提示不安全。這里雙擊server.cer安裝服務器證書。
注意:將證書填入到“受信任的根證書頒發機構”
在這里插入圖片描述
再次重新訪問服務器,會發現沒有不安全的提示了,同時瀏覽器地址欄上也有個“鎖”圖標,表示本次會話已經通過HTTPS雙向驗證。
3.2IOS配置
直接把P12文件 以及sever.cer文件給IOS開發人員就行了
3.3android配置實現 Portecle1.9
需要把jks轉換成bks讓安卓能識別驗證步驟如下:
1.雙擊運行portecle.jar
在這里插入圖片描述
此處輸入的密碼是你生成的bks文件時所用的密碼(123456)
在這里插入圖片描述
然后生成bks文件
生成BKS
這個密碼是你給安卓人員的 他們要解析這個證書用的隨機(123456)
在這里插入圖片描述
最后提示SUCCESSFUL 表示成功
在這里插入圖片描述
**重點:**由于生成生成功后需要保持的,文件名一定要加.bks結尾不然就直接生成了文件了,安卓識別不了
在這里插入圖片描述
此時把.bks文件和sever.cer文件給安卓開發人員
最后強制tomcat走https
打開Tomcat安裝目錄中conf/web.xml文件,在最后面加上以下內容即可
CLIENT-CERT
Client Cert Users-only Area
SSL
/*
CONFIDENTIAL
四、其他相關說明
使用工具轉換多次時會報異常這是因為如果密鑰大于128, 會拋出java.security.InvalidKeyException: Illegal key size 異常. 因為密鑰長度是受限制的, java運行時環境讀到的是受限的policy文件. 文件位于${java_home}/jre/lib/security, 這種限制是因為美國對軟件出口的控制
解決方案:去官方下載JCE無限制權限策略文件。