1 jdk生成工具keytool
keytool -genkey -alias xylink -keystore kserver.keystore
keytool -export -alias xylink -keystore kserver.keystore -file server.crt
keytool -import -alias xylink -file server.crt -keystore tclient.keystore
keytool -genkey -alias fwding -keystore kclient.keystore
keytool -export -alias fwding -keystore kclient.keystore -file client.crt
keytool -import -alias fwding -file client.crt -keystore tserver.keystore
2 查看keystore
keytool -list -v -keystore testkeys
如下所示爲命令行執行結果
☁ resources [master] ⚡ keytool -list -v -keystore testkeys
輸入密鑰庫口令:
密鑰庫類型: jks
密鑰庫提供方: SUN
您的密鑰庫包含 1 個條目
別名: localhost
創建日期: 2004-7-23
條目類型: PrivateKeyEntry
證書鏈長度: 1
證書[1]:
所有者: CN=localhost, OU=Widget Development Group, O="Ficticious Widgets, Inc.", L=Sunnyvale, ST=CA, C=US
發佈者: CN=localhost, OU=Widget Development Group, O="Ficticious Widgets, Inc.", L=Sunnyvale, ST=CA, C=US
序列號: 41004446
有效期爲 Fri Jul 23 06:48:38 CST 2004 至 Mon May 23 06:48:38 CST 2011
證書指紋:
MD5: 51:2C:B6:13:13:C5:AF:CC:C6:2F:AA:D8:65:E8:97:B5
SHA1: 59:0C:44:64:22:3F:05:91:EF:B7:93:33:81:C5:37:5F:A5:57:FC:BD
SHA256: 37:77:E0:DA:37:66:C9:49:75:24:66:BE:F9:D7:CA:3B:FF:5E:9A:F2:C3:A0:BD:0D:90:C2:DB:B4:9D:DE:68:4F
簽名算法名稱: MD5withRSA (弱)
主體公共密鑰算法: 1024 位 RSA 密鑰
版本: 1
*******************************************
*******************************************
Warning:
<localhost> 使用的 MD5withRSA 簽名算法存在安全風險。
JKS 密鑰庫使用專用格式。建議使用 "keytool -importkeystore -srckeystore testkeys -destkeystore testkeys -deststoretype pkcs12" 遷移到行業標準格式 PKCS12。
3 keytool生成證書命令說明
以下描述來自文檔:
keytool -genkeypair \
-alias server-local \
-keyalg RSA \
-keysize 4096 \
-keypass mypassword \
-sigalg SHA256withRSA \
-dname "cn=server-local,ou=xxx,o=xxx,l=wuhan,st=wuhan,c=CN" \
-validity 3650 \
-keystore server_keystore.jks \
-storetype JKS \
-storepass mypassword
- keytool 是jdk提供的工具,該工具名爲”keytool“
- -alias www.mydomain.com 此處”www.mydomain.com“爲別名,可以是任意字符,只要不提示錯誤即可。因一個證書庫中可以存放多個證書,通過別名標識證書。
- -keyalg RSA 此處”RSA“爲密鑰的算法。可以選擇的密鑰算法有:RSA、DSA、EC。
- –keysize 4096 此處”4096“爲密鑰長度。keysize與keyalg默認對應關係:
2048 (when using -genkeypair and -keyalg is “RSA”)
1024 (when using -genkeypair and -keyalg is “DSA”)
256 (when using -genkeypair and -keyalg is “EC”) - -keypass mypassword 此處”mypassword “爲本條目的密碼(私鑰的密碼)。最好與storepass一致。
- -sigalg SHA256withRSA 此處”SHA256withRSA“爲簽名算法。keyalg=RSA時,簽名算法有:MD5withRSA、SHA1withRSA、SHA256withRSA、SHA384withRSA、SHA512withRSA。keyalg=DSA時,簽名算法有:SHA1withDSA、SHA256withDSA。此處需要注意:MD5和SHA1的簽名算法已經不安全。
- -dname “cn=www.mydomain.com,ou=xxx,o=xxx,l=Beijing,st=Beijing,c=CN” 在此填寫證書信息。“CN=名字與姓氏/域名,OU=組織單位名稱,O=組織名稱,L=城市或區域名稱,ST=州或省份名稱,C=單位的兩字母國家代碼”
- -validity 3650 此處”3650“爲證書有效期天數。
- -keystore www.mydomain.com_keystore.jks 此處”www.mydomain.com_keystore.jks“爲密鑰庫的名稱。此處也給出絕對路徑。默認在當前目錄創建證書庫。
- -storetype JKS 此處”JKS “爲證書庫類型。可用的證書庫類型爲:JKS、PKCS12等。jdk9以前,默認爲JKS。自jdk9開始,默認爲PKCS12。
- -storepass mypassword 此處”mypassword “爲證書庫密碼(私鑰的密碼)。最好與keypass 一致。
4 三方公正流程
4.1 生成祕鑰證書庫-keystore
01-server_keystore.jks
keytool -genkeypair \
-alias server-local \
-keyalg RSA \
-keysize 4096 \
-keypass server \
-sigalg SHA256withRSA \
-dname "cn=server-local,ou=xxx,o=xxx,l=wuhan,st=wuhan,c=CN" \
-validity 3650 \
-keystore 01-server_keystore.jks \
-storetype JKS \
-storepass server
4.2 生成證書籤名-CSR
01-server.csr – 簽名證書
GlobalSign_cert.cer – 簽名機構證書
keytool -certreq -keyalg RSA \
-alias server-local \
-keystore 01-server_keystore.jks \
-storetype JKS \
-storepass server \
-file 01-server.csr
4.3 向認證機構提交請求獲取證書-CER
01-server.cer
4.4 將已簽名證書導入客戶端證書庫
導入簽名機構的根證書:
keytool -import -trustcacerts \
-keystore 02-client_trust_keystore.jks \
-storepass client \
-alias root_GlobalSign \
-file GlobalSign_cert.cer
導入服務器證書
keytool -import -trustcacerts \
-keystore 02-client_trust_keystore.jks \
-storepass client \
-alias server_csr \
-file 01-server.cer
5 jdk keytool自簽名流程
5.1 生成祕鑰證書庫-keystore
keytool -genkeypair \
-alias server-local \
-keyalg RSA \
-keysize 4096 \
-keypass server \
-sigalg SHA256withRSA \
-dname "cn=server-local,ou=xxx,o=xxx,l=wuhan,st=wuhan,c=CN" \
-validity 3650 \
-keystore 01-server_keystore.jks \
-storetype JKS \
-storepass server
5.2 驗證keystore
keytool -list -v -keystore 01-server_keystore.jks
5.3 導出公鑰證書-CER
注意這裏與4.2不同,對應爲4.3生成的cer證書
keytool -export -alias server-local -keystore 01-server_keystore.jks -rfc -file 01-server.cer
5.4 導入客戶端信任keystore
Keytool -import -alias server-local -file 01-server.cer -keystore 02-client_trust.jks
6 openssl生成祕鑰
pem->pk12->keystore
#### 1- 生成私鑰
openssl genrsa -out server.pem 1024
#### 2-創建證書
openssl req -new -out server.csr -key server.pem
#### 3-自簽署證書
openssl x509 -req -in server.csr -out server.cer -signkey server.pem -days 3650
#### 4-將證書導出成瀏覽器支持的.p12格式
openssl pkcs12 -export -clcerts -in server.cer -inkey server.pem -out server.p12 -name localhost
7 openssl與keytool證書轉換
pem->pk12->keystore
#### keytool -importkeystore -deststorepass 目標存儲庫口令 -destkeypass 目標密鑰庫口令 -destkeystore out.keystore(目標密鑰庫) -srckeystore out.pk12(源密鑰庫) -srcstoretype PKCS12(源存儲類型) -srcstorepass 源存儲庫口令 -alias 別名
keytool -importkeystore -deststorepass server -destkeypass server -destkeystore out.keystore -srckeystore server.p12 -srcstoretype PKCS12 -srcstorepass server -alias localhost
p12–>pem
openssl pkcs12 -nocerts -nodes -in testkeys -out test.pem
openssl rsa -in test.pem > clearkey.pem