用keytool建立Keystore和Truststore文件

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 需導入的證書
 
相關文章
相關標籤/搜索