1、介紹
1.目的:JSSE使用Truststore和Keystore文件來提供客戶端和服務器之間的安全數據傳輸。 java
2.描述:Keytool 是一個Java數據證書的管理工具 ,Keytool將密鑰(key)和證書(certificates)存在一個稱爲keystore的文件中. 在keystore裏,包含兩種數據:密鑰實體(Key entity)-密鑰(secret key)或者是私鑰和配對公鑰(採用非對稱加密);可信任的證書實體(trusted certificate entries)-只包含公鑰. 算法
即:keytool是一個工具能夠用來建立包含公鑰和密鑰的的keystore文件,而且利用keystore文件來建立只包含公鑰的truststore文件。 安全
2、步驟
1.生成一個含有一個私鑰的keystore文件
$ keytool -genkey -alias certificatekey -keyalg RSA -validity 700 -keystore keystore.jks
說明:
服務器
- genkey:在用戶主目錄中建立一個默認文件".keystore",還會產生一個mykey的別名,mykey中包含用戶的公鑰、私鑰和證書
- alias:別名
- keyalg:指定密鑰的算法(如:RSA ,DSA 默認值爲:DSA)
- validity: 指定建立的證書有效期多少天(默認 90)
- keystore: 指定密鑰庫的名稱( 產生的各種信息將不在.keystore文件中,而是在keystore.jks中)
$ keytool -genkey -alias certificatekey -keyalg RSA -validity 700 -keystore keystore.jks 輸入密鑰庫口令:***** 再次輸入新口令:***** 您的名字與姓氏是什麼? [Unknown]: peng... 您的組織單位名稱是什麼? [Unknown]: asia.. 您的組織名稱是什麼? [Unknown]: mall 您所在的城市或區域名稱是什麼? [Unknown]: beijing 您所在的省/市/自治區名稱是什麼? [Unknown]: beijing 該單位的雙字母國家/地區代碼是什麼? [Unknown]: ZG CN=peng..., OU=..., O=mall, L=beijing, ST=beijing, C=ZG是否正確? [否]: Y 輸入 <certificatekey> 的密鑰口令:**** (若是和密鑰庫口令相同, 按回車): 再次輸入新口令:**** ...... 工具 |
2.驗證生成的keystore文件和證書信息
$ keytool -list -v -keystore keystore.jks
$ keytool -list -v -keystore keystore.jks 輸入密鑰庫口令:**** 密鑰庫類型: JKS 密鑰庫提供方: SUN 您的密鑰庫包含 1 個條目 別名: certificatekey 建立日期: 2015-11-25 條目類型: PrivateKeyEntry 證書鏈長度: 1 證書[1]: 全部者: CN=peng.., OU=asiai.., O=mall, L=beijing, ST=beijing, C=ZG 發佈者: CN=peng.., OU=asia.., O=mall, L=beijing, ST=beijing, C=ZG 序列號: 51c8a241 有效期開始日期: Wed Nov 25 15:37:07 CST 2015, 截止日期: Wed Oct 25 15:37:07 CST 2017 證書指紋: MD5: 9B:A7:CC:B4:2B:E2:31:F0:7A:E0:36:.. SHA1: 4E:45:3A:A2:4F:B7:BA:84:0A:F2:CF:E.... SHA256: 5F:4B:8.. ..... |
3.從keystore.jks導出公鑰證書
$ keytool -export -alias certificatekey -keystore keystore.jks -rfc -file gongyaoCert.cer 輸入密鑰庫口令:******* 存儲在文件 <gongyaoCert.cer> 中的證書 |
4. Truststore的生成以及公鑰證書的導入
$ keytool -import -alias certificatekey -file gongyaoCert.cer -keystore truststore.jks 加密 輸入密鑰庫口令:****** 再次輸入新口令:****** spa 全部者: CN=peng.., OU=asia.., O=mall, L=beijing, ST=beijing, C=ZG 發佈者: CN=peng..., OU=asi..., O=mall, L=beijing, ST=beijing, C=ZG code 序列號: 51c8a24 有效期開始日期: Wed Nov 25 15:37:07 CST 2015, 截止日期: Wed Oct 25 15:37:07 CST 2017 證書指紋: MD5: 9B:A7:CC:B4:2B:E2:31:F0:7A:E... SHA1: 4E:45:3A:A2:4F:B7:BA:84:0A:F2.... SHA256: 5F:4B:8B:43:BA:A1:60:B0:3A:C5:71:CB:4E:C4:0A:B.... 簽名算法名稱: SHA2... 版本: 3 擴展: #1: ObjectId: 2.5.29.14 Criticality=false SubjectKeyIdentifier [ KeyIdentifier [ 0000: ED 64 B3 D4 34 6E 84 28 ..... DB .d..4n.(!..uw/.. 0010: 57 9D B6 44 W..D ] ] 是否信任此證書? [否]: y 證書已添加到密鑰庫中 |
5.驗證公鑰truststore.jks文件
$ keytool -list -v -keystore truststore.jks
3、附錄
1.
JDK中keytool經常使用參數說明(不一樣版本有差別):
- -genkey
在用戶主目錄中建立一個默認文件」.keystore」,還會產生一個mykey的別名,mykey中包含用戶的公鑰、私鑰和證書(在沒有指定生成位置的狀況下,keystore會存在用戶系統默認目錄)
- -alias
產生別名 每一個keystore都關聯這一個獨一無二的alias,這個alias一般不區分大小寫
- -keystore
指定密鑰庫的名稱(產生的各種信息將不在.keystore文件中)
- -keyalg
指定密鑰的算法 (如 RSA DSA,默認值爲:DSA)
- -validity
指定建立的證書有效期多少天(默認 90)
- -keysize 指定密鑰長度 (默認 1024)
- -storepass 指定密鑰庫的密碼(獲取keystore信息所需的密碼)
- -keypass 指定別名條目的密碼(私鑰的密碼)
- -dname 指定證書發行者信息 其中: 「CN=名字與姓氏,OU=組織單位名稱,O=組織名稱,L=城市或區域名 稱,ST=州或省份名稱,C=單位的兩字母國家代碼」
- -list 顯示密鑰庫中的證書信息 keytool -list -v -keystore 指定keystore -storepass 密碼
- -v 顯示密鑰庫中的證書詳細信息
- -export 將別名指定的證書導出到文件 keytool -export -alias 須要導出的別名 -keystore 指定keystore -file 指定導出的證書位置及證書名稱 -storepass 密碼
- -file 參數指定導出到文件的文件名
- -delete 刪除密鑰庫中某條目 keytool -delete -alias 指定需刪除的別 -keystore 指定keystore – storepass 密碼
- -printcert 查看導出的證書信息 keytool -printcert -file g:\sso\michael.crt
- -keypasswd 修改密鑰庫中指定條目口令 keytool -keypasswd -alias 需修改的別名 -keypass 舊密碼 -new 新密碼 -storepass keystore密碼 -keystore sage
- -storepasswd 修改keystore口令 keytool -storepasswd -keystore g:\sso\michael.keystore(需修改口令的keystore) -storepass pwdold(原始密碼) -new pwdnew(新密碼)
- -import 將已簽名數字證書導入密鑰庫 keytool -import -alias 指定導入條目的別名 -keystore 指定keystore -file 需導入的證書
- 中建立一個默認文件」.keystore」,還會產生一個mykey的別名,mykey中包含用戶的公鑰、私鑰和證書(在沒有指定生成位置的狀況下,keystore會存在用戶系統默認目錄)
- -alias 產生別名 每一個keystore都關聯這一個獨一無二的alias,這個alias一般不區分大小寫
- -keystore 指定密鑰庫的名稱(產生的各種信息將不在.keystore文件中)
- -keyalg 指定密鑰的算法 (如 RSA DSA,默認值爲:DSA)
- -validity 指定建立的證書有效期多少天(默認 90)
- -keysize
指定密鑰長度 (默認 1024)
- -storepass
指定密鑰庫的密碼(獲取keystore信息所需的密碼)
- -keypass
指定別名條目的密碼(私鑰的密碼)
- -dname
指定證書發行者信息 其中: 「CN=名字與姓氏,OU=組織單位名稱,O=組織名稱,L=城市或區域名 稱,ST=州或省份名稱,C=單位的兩字母國家代碼」
- -list
顯示密鑰庫中的證書信息 keytool -list -v -keystore 指定keystore -storepass 密碼
- -v
顯示密鑰庫中的證書詳細信息
- -export 將別名指定的證書導出到文件 keytool -export -alias 須要導出的別名 -keystore 指定keystore -file 指定導出的證書位置及證書名稱 -storepass 密碼
- -file 參數指定導出到文件的文件名
- -delete 刪除密鑰庫中某條目 keytool -delete -alias 指定需刪除的別 -keystore 指定keystore – storepass 密碼
- -printcert 查看導出的證書信息 keytool -printcert -file g:\sso\michael.crt
- -keypasswd 修改密鑰庫中指定條目口令 keytool -keypasswd -alias 需修改的別名 -keypass 舊密碼 -new 新密碼 -storepass keystore密碼 -keystore sage
- -storepasswd 修改keystore口令 keytool -storepasswd -keystore g:\sso\michael.keystore(需修改口令的keystore) -storepass pwdold(原始密碼) -new pwdnew(新密碼)
- -import 將已簽名數字證書導入密鑰庫 keytool -import -alias 指定導入條目的別名 -keystore 指定keystore -file 需導入的證書