openssl及keytool生成證書命令行梳理

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生成證書命令說明

以下描述來自文檔:

【SSL】使用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與store相互轉換

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
發佈了91 篇原創文章 · 獲贊 18 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章