JDK里自帶的,位於<JAVA_HOME>\bin\keytool.exe
Keytool將密鑰(key)和證書(certificates)存在一個稱為keystore的文件中
在keystore里,包含兩種數據:
密鑰實體(Key entity)——密鑰(secret key)又或者是私鑰和配對公鑰(采用非對稱加密)
可信任的證書實體(trusted certificate entries)——只包含公鑰
keytool -help
密鑰和證書管理工具 命令: -certreq 生成證書請求 -changealias 更改條目的別名 -delete 刪除條目 -exportcert 導出證書 -genkeypair 生成密鑰對 -genseckey 生成密鑰 -gencert 根據證書請求生成證書 -importcert 導入證書或證書鏈 -importpass 導入口令 -importkeystore 從其他密鑰庫導入一個或所有條目 -keypasswd 更改條目的密鑰口令 -list 列出密鑰庫中的條目 -printcert 打印證書內容 -printcertreq 打印證書請求的內容 -printcrl 打印 CRL 文件的內容 -storepasswd 更改密鑰庫的存儲口令
1.創建證書
>keytool -genkeypair -alias "test" -storetype pkcs12 -keyalg "RSA" -keystore "test.p12" 輸入密鑰庫口令: 再次輸入新口令: 您的名字與姓氏是什么? [Unknown]: li 您的組織單位名稱是什么? [Unknown]: abc 您的組織名稱是什么? [Unknown]: xyz 您所在的城市或區域名稱是什么? [Unknown]: Ji 您所在的省/市/自治區名稱是什么? [Unknown]: Dong 該單位的雙字母國家/地區代碼是什么? [Unknown]: CC CN=li, OU=abc, O=xyz, L=Ji, ST=Dong, C=CC是否正確? [否]: y
生成了證書test.p12
說明:
-storetype 指定倉庫類型, JKS、 JCEKS、 PKCS12 等
-keyalg 指定密鑰的算法, RSA、 DSA 等,默認DSA
-keysize 指定密鑰長度,默認2048
-alias:指定密鑰對的別名,該別名是公開的
-keystore:密鑰庫的路徑及名稱
2.查看證書
>keytool -list -keystore test.p12 輸入密鑰庫口令: 密鑰庫類型: JKS 密鑰庫提供方: SUN 您的密鑰庫包含 1 個條目 test, 2020-4-14, PrivateKeyEntry, 證書指紋 (SHA1): 5B:E7:9D:E8:84:6B:17:E4:CF:1C:EA:49:00:38:CD:3B:AF:FC:43:15
3.導出證書
>keytool -export -alias test -file test.crt -keystore test.p12
輸入密鑰庫口令:
存儲在文件 <test.crt> 中的證書
查看crt證書信息
>keytool -printcert -file test.crt
所有者: CN=li, OU=abc, O=xyz, L=Jinan, ST=Shandong, C=China 發布者: CN=li, OU=abc, O=xyz, L=Jinan, ST=Shandong, C=China 序列號: 492e4a72 有效期為 Tue Apr 14 14:33:17 CST 2020 至 Mon Jul 13 14:33:17 CST 2020 證書指紋: MD5: D7:F1:E5:83:D6:6F:3F:77:C0:EE:C3:4A:51:EF:82:D1 SHA1: 5B:E7:9D:E8:84:6B:17:E4:CF:1C:EA:49:00:38:CD:3B:AF:FC:43:15 SHA256: 77:12:78:1D:A7:96:22:CD:C1:18:EC:2F:9C:76:01:59:ED:0B:09:A6:C0:EF:37:F5:BA:41:9C:88 :3A:16:E1:42 簽名算法名稱: SHA256withRSA 主體公共密鑰算法: 2048 位 RSA 密鑰 版本: 3 擴展: #1: ObjectId: 2.5.29.14 Criticality=false SubjectKeyIdentifier [ KeyIdentifier [ 0000: C1 AB 06 D8 FA 6E 91 2C 43 0C DE 66 D1 B6 92 F6 .....n.,C..f.... 0010: D4 8D D6 70 ...p ] ]
4.導入證書
>keytool -import -keystore test_crt -file test.crt 輸入密鑰庫口令: 再次輸入新口令: 所有者: CN=li, OU=abc, O=xyz, L=Jinan, ST=Shandong, C=China 發布者: CN=li, OU=abc, O=xyz, L=Jinan, ST=Shandong, C=China 序列號: 492e4a72 有效期為 Tue Apr 14 14:33:17 CST 2020 至 Mon Jul 13 14:33:17 CST 2020 證書指紋: MD5: D7:F1:E5:83:D6:6F:3F:77:C0:EE:C3:4A:51:EF:82:D1 SHA1: 5B:E7:9D:E8:84:6B:17:E4:CF:1C:EA:49:00:38:CD:3B:AF:FC:43:15 SHA256: 77:12:78:1D:A7:96:22:CD:C1:18:EC:2F:9C:76:01:59:ED:0B:09:A6:C0:EF:37:F5:BA:41:9C:88 :3A:16:E1:42 簽名算法名稱: SHA256withRSA 主體公共密鑰算法: 2048 位 RSA 密鑰 版本: 3 擴展: #1: ObjectId: 2.5.29.14 Criticality=false SubjectKeyIdentifier [ KeyIdentifier [ 0000: C1 AB 06 D8 FA 6E 91 2C 43 0C DE 66 D1 B6 92 F6 .....n.,C..f.... 0010: D4 8D D6 70 ...p ] ] 是否信任此證書? [否]: y 證書已添加到密鑰庫中
5.刪除
查看
>keytool -list -keystore test_crt 輸入密鑰庫口令: 密鑰庫類型: JKS 密鑰庫提供方: SUN 您的密鑰庫包含 1 個條目 mykey, 2020-4-14, trustedCertEntry, 證書指紋 (SHA1): 5B:E7:9D:E8:84:6B:17:E4:CF:1C:EA:49:00:38:CD:3B:AF:FC:43:15
刪除
>keytool -delete -keystore test_crt -alias mykey
6.修改證書條目的口令
>keytool -keypasswd -alias test -keystore test.p12 輸入密鑰庫口令: 輸入 <test> 的密鑰口令 新<test> 的密鑰口令: 重新輸入新<test> 的密鑰口令: