Java 使用keytool創(chuàng)建CA證書的操作
keytool是一個(gè)密鑰和證書管理工具
1.keytool工具位置keytool工具在 JDK 的安裝目錄的 bin 目錄下面
打開命令行進(jìn)入 bin 目錄,然后輸入命令 keytool.exe,就能看見keytool工具支持哪些命令,如下圖所示:
注意下面的用法提示:使用 “keytool -command_name -help” 獲取 command_name 的用法
3.查看具體命令用法這里我們使用 -genkeypair 命令來創(chuàng)建密鑰庫(kù),先來看看 genkeypair 命令的用法,如下圖所示:
.keytool.exe -genkeypair -alias CA -keyalg RSA -validity 30 -keystore D:keytoolCert.CAkeystore
4.1.參數(shù)說明
-alias CA: alias表示別名的意思,這里別名為 CA,如果不寫的話,它的默認(rèn)值為 mykey
-keyalg RSA: 密鑰算法名稱,這里使用RSA算法
-validity 30: 有效天數(shù)為30天
-keystore D:keytoolCert.CAkeystore: 指定密鑰庫(kù)存放的位置。
命令輸入過后會(huì)讓我們輸入密碼、唯一判別名(dname)和密鑰口令
注意
密鑰庫(kù)的密碼至少必須6個(gè)字符,可以是純數(shù)字或者字母或者數(shù)字和字母的組合等等
名字與姓氏'應(yīng)該是輸入域名,而不是我們的個(gè)人姓名,其他的可以不填
這條命令的完整含義是:使用 keytool.exe ,創(chuàng)建一個(gè)別名為 CA,算法為 RSA,有效天數(shù)為30天的密鑰,并將它存放在 D:keytoolCert 目錄下的一個(gè)名叫 .CAkeystore 的密鑰庫(kù)中,如果密鑰庫(kù)不存在則自動(dòng)創(chuàng)建。
執(zhí)行完上述命令后,在 D:keytoolCert 目錄下生成了一個(gè)'.CAkeystore'的文件,如下圖所示:
命令如下:
.keytool.exe -list -keystore D:keytoolCert.CAkeystore -v
結(jié)果如下:
5.1.查看密鑰庫(kù)信息其他命令
查看密鑰庫(kù)中指定密鑰的信息:
keytool.exe -list -alias CA -keystore“D:keytoolCert.CAkeystore” -v6.導(dǎo)出密鑰到證書文件
.keytool -export -alias CA -file D:keytoolCertpendIssueCert_1.cer -keystore D:keytoolCert.CAkeystore
執(zhí)行完上述命令后,在 D:keytoolCert 目錄下生成了一個(gè)'pendIssueCert_1.cer'的證書文件,如下圖所示:
keytool.exe -printcert -file D:keytoolCert.pendIssueCert_1.cer -v
將證書文件 pendIssueCert_1.cer 導(dǎo)入到名為 .pendIssuekeystore 的證書庫(kù)中
keytool -import -keystore D:keytoolCert.pendIssuekeystore -file D:keytoolCertpendIssueCert_1.cer
注意:
D:keytoolCert.pendIssuekeystore 密鑰庫(kù)不存在會(huì)自動(dòng)創(chuàng)建
導(dǎo)入時(shí)沒有輸入 -alias 那么它的別名就是 mykey ,如果有需要可以自己指定別名
9.刪除密鑰庫(kù)中的條目刪除密鑰庫(kù) .pendIssuekeystore 中別名為 mykey 的證書條目
keytool -delete -keystore D:keytoolCert.pendIssuekeystore -alias mykey
刪除前先查看 有一個(gè)密鑰,刪除后再查看就沒有了,表示刪除成功。
修改證書條目的口令
將密鑰庫(kù) .pendIssuekeystore 中別名為 mykey 的證書條目的密碼修改為 123456
keytool -keypasswd -alias mykey -keystore D:keytoolCert.pendIssuekeystore
補(bǔ)充:Java Keytool生成數(shù)字證書/.cer/.p12文件
任何機(jī)構(gòu)或者個(gè)人都可以申請(qǐng)數(shù)字證書,并使用由CA機(jī)構(gòu)頒發(fā)的數(shù)字證書為自己的應(yīng)用保駕護(hù)航。常用的兩個(gè)證書管理工具:KeyTool,OpenSSL—>構(gòu)建CSR(Certificate Signing Request,數(shù)字證書簽發(fā)申請(qǐng)),交由CA機(jī)構(gòu)簽發(fā),形成最終的數(shù)字證書。
最近用到p12文件,就記錄一下如何使用jdk自帶的keytool來創(chuàng)建p12文件
創(chuàng)建私鑰和證書1.打開cmd,切換到j(luò)dk的bin目錄下
2.輸入命令
keytool -genkeypair -alias serverkey -keyalg RSA -keysize 2048 -validity 3650 -keystore C:Usersi343740Desktopp12test.keystore
參數(shù)解釋:
storepass keystore 文件存儲(chǔ)密碼,不加這個(gè)參數(shù)會(huì)在后面要求你輸入密碼
keypass 私鑰加解密密碼
alias 實(shí)體別名(包括證書私鑰)
dname 證書個(gè)人信息
keyalg 采用公鑰算法,默認(rèn)是DSA,這里采用RSA
keysize 密鑰長(zhǎng)度(DSA算法對(duì)應(yīng)的默認(rèn)算法是sha1withDSA,不支持2048長(zhǎng)度,此時(shí)需指定RSA)
validity 有效期
keystore 指定keystore文件儲(chǔ)存位置
3.命令行會(huì)要求你輸入一些信息,這里只是試用,隨意輸一些就可以了
What is your first and last name? [Unknown]: xuWhat is the name of your organizational unit? [Unknown]: SAPWhat is the name of your organization? [Unknown]: SAPWhat is the name of your City or Locality? [Unknown]: ShangHaiWhat is the name of your State or Province? [Unknown]: ShangHaiWhat is the two-letter country code for this unit? [Unknown]: CNIs CN=xu, OU=SAP, O=SAP, L=ShangHai, ST=ShangHai, C=CN correct? [no]: Y
4.最后一行: 輸入的密鑰口令,這里因?yàn)槲覀冊(cè)谏厦嬖O(shè)置了一個(gè)密鑰庫(kù)的口令,因此這里的口令如果和上面設(shè)置的口令一樣的話,就直接回車就好,如果兩個(gè)口令不一樣,那么我們可以輸入新的口令,回車
5.經(jīng)過上述操作,秘鑰庫(kù)中已經(jīng)創(chuàng)建了數(shù)字證書(沒有經(jīng)過CA認(rèn)證),但不影響我們使用。我們可以將數(shù)字證書導(dǎo)出,發(fā)送給合作伙伴進(jìn)行加密交互。
查看keystore詳情1.輸入命令
keytool -v -list -keystore C:Usersi343740Desktopp12test.keystore
可以看到keystore詳情:
Keystore type: jksKeystore provider: SUNYour keystore contains 1 entryAlias name: serverkeyCreation date: Sep 18, 2018Entry type: PrivateKeyEntryCertificate chain length: 1Certificate[1]:Owner: CN=xu, OU=SAP, O=SAP, L=ShangHai, ST=ShangHai, C=CNIssuer: CN=xu, OU=SAP, O=SAP, L=ShangHai, ST=ShangHai, C=CNSerial number: 68a01736Valid from: Tue Sep 18 15:29:16 CST 2018 until: Fri Sep 15 15:29:16 CST 2028Certificate fingerprints: MD5: 6D:02:83:77:1D:8F:80:4A:7E:71:10:E5:D1:F7:DA:A1 SHA1: 50:A7:46:DE:BC:9E:0E:22:AC:AD:85:63:3D:29:FB:FF:75:66:55:3E SHA256: 78:C4:65:71:A2:54:2B:56:2E:7B:8F:16:7D:EB:53:46:4E:9C:0C:AF:55:F8:3E:0C:37:FC:CD:A6:8C:04:9E:84Signature algorithm name: SHA256withRSASubject Public Key Algorithm: 2048-bit RSA keyVersion: 3......(還有一些)導(dǎo)出本地證書(.cer)
1.輸入命令
keytool -exportcert -keystore C:Usersi343740Desktopp12test.keystore -file C:Usersi343740Desktopp12test.cer -alias serverkey
參數(shù)解釋:
-export 表示證書導(dǎo)出操作
-keystore 指定秘鑰庫(kù)文件
-file 指定導(dǎo)出文件路徑
-storepass 輸入密碼
-rfc 指定以Base64編碼格式輸出
打印數(shù)字證書1.輸入命令
Keytool -printcert -file C:Usersi343740Desktopp12test.cer將.cer格式的證書轉(zhuǎn)換為p12證書
1.輸入命令
keytool -importkeystore -srckeystore C:Usersi343740Desktopp12test.keystore -destkeystore C:Usersi343740Desktopp12test.p12 -srcalias serverkey -destalias serverkey -srcstoretype jks -deststoretype pkcs12 -noprompt
2.輸入目標(biāo)密鑰庫(kù)口令和源密鑰庫(kù)口令即可(目標(biāo)密鑰庫(kù)口令指的是我們要為.p12證書設(shè)置的口令,而源密鑰庫(kù)口令則指的是我們最初為.cer證書設(shè)置的密鑰庫(kù)口令)
P12的兩個(gè)命令:生成證書:
keytool -genkey -v -alias client -keyalg RSA-storetype PKCS12 -keystore C:Usersi343740Desktopp12test.p12
導(dǎo)出證書:
keytool -export -alias client -keystore C:Usersi343740Desktopp12test.p12-storetype PKCS12 -storepass 123456 -rfc -file C:Usersi343740Desktopp12test.cer
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持好吧啦網(wǎng)。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教。
相關(guān)文章:
1. asp(vbs)Rs.Open和Conn.Execute的詳解和區(qū)別及&H0001的說明2. 利用promise及參數(shù)解構(gòu)封裝ajax請(qǐng)求的方法3. 解決AJAX返回狀態(tài)200沒有調(diào)用success的問題4. PHP設(shè)計(jì)模式中工廠模式深入詳解5. ThinkPHP5實(shí)現(xiàn)JWT Token認(rèn)證的過程(親測(cè)可用)6. .NET中l(wèi)ambda表達(dá)式合并問題及解決方法7. ASP 信息提示函數(shù)并作返回或者轉(zhuǎn)向8. JSP數(shù)據(jù)交互實(shí)現(xiàn)過程解析9. Ajax實(shí)現(xiàn)表格中信息不刷新頁(yè)面進(jìn)行更新數(shù)據(jù)10. CSS hack用法案例詳解
