Home

2013年2月6日 星期三

Java Keytool的使用及申請憑證(以Microsoft Active Directory Certificate Services為例)

Keytool是一個Java資料證書的管理工具,Keytool將金鑰(key)和證書(certificates)存在一個稱為keystore的檔中 在keystore裡,包含兩種資料:
  • 金鑰實體(Key entity:金鑰(secret key)又或者是私密金鑰和配對公開金鑰(採用非對稱加密)
  • 可信任的證書實體(trusted certificate entries):只包含公開金鑰
ailas(別名)每個keystore都關聯這一個獨一無二的alias,這個alias通常不區分大小寫 

JDK中keytool常用指令:
  • -genkey:在用戶主目錄中創建一個預設檔".keystore",還會產生一個mykey的別名,mykey中包含用戶的公開金鑰、私密金鑰和證書(在沒有指定生成位置的情況下,keystore會存在使用者系統預設目錄,如:對於windows系統,會生成在系統的C:\Documents and Settings\UserName\檔案名為“.keystore”)
  • -alias:產生別名
  • -keystore:指定金鑰庫的名稱(產生的各類資訊將不在.keystore文件中)
  • -keyalg:指定金鑰的演算法 (如 RSA  DSA(如果不指定默認採用DSA))
  • -validity:指定創建的證書有效期多少天
  • -keysize:指定金鑰長度
  • -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 yushan.crt
  • -keypasswd:修改金鑰庫中指定條目指令:keytool -keypasswd -alias 需修改的別名 -keypass 舊密碼 -new  新密碼  -storepass keystore密碼  -keystore sage
  • -storepasswd:修改keystore指令:keytool -storepasswd -keystore e:\polin.keystore(需修改口令的keystore) -storepass 123456(原始密碼) -new polinwei(新密碼)
  • -import:將已簽名數位憑證導入金鑰庫  keytool -import -alias 指定導入條目的別名 -keystore 指定keystore -file 需導入的證書

下面是各選項的預設值。
  • -alias "mykey"
  • -keyalg "DSA"
  • -keysize 1024
  • -validity 90
  • -keystore  為使用者主目錄中名為 .keystore 的文件
  • -file 讀入時為標準輸入,寫出時為標準輸出



1. keystore的產生: 
分階段產生:
keytool -genkey -alias edi-prod(別名) -keypass password(別名密碼) -keyalg RSA(演算法) -keysize 1024(金鑰長度) -validity 365(有效期,天單位) -keystore ./edi.keystore(指定生成證書的位置和證書名稱) -storepass 123456(獲取keystore資訊的密碼)

一次性產生:
keytool -genkey -alias edi-prod -keypass password -keyalg RSA -keysize 1024 -validity 365 -keystore ./edi.keystore -storepass 123456 -dname "CN=(名字與姓氏), OU=(組織單位名稱), O=(組織名稱), L=(城市或區域名稱), ST=(州或省份名稱), C=(單位的兩字母國家代碼)";(中英文都可)

2.查看keystore裡的資訊:
keytool -list  -v -keystore ./edi.keystore -storepass 123456

Keystore 類型: JKS
Keystore 提供者: SUN

您的 keystore 包含 1 輸入

別名名稱: edi-prod
建立日期: 2013/2/6
項目類型:PrivateKeyEntry
認證鏈長度: 1
認證 [1]:
所有者:CN=mis, OU=mis, O=wei, L=Taipei, ST=Taipei, C=TW
核發者:CN=mis, OU=mis, O=wei, L=Taipei, ST=Taipei, C=TW
序號:51121b83
自以下日期開始生效:Wed Feb 06 16:59:47 CST 2013,直到:Thu Feb 06 16:59:47 CST 2014
憑證指紋:
        MD5:C7:EE:5A:17:C6:FF:0D:30:7C:6B:52:53:D7:29:B1:A6
        SHA1:35:D9:F0:07:5B:2D:9E:89:45:9A:4D:B8:8B:B9:7F:12:D1:36:3B:EC
        簽名演算法名稱:SHA1withRSA
        版本:3
3.產生要向第三方發證單位(如:CA)申請的檔案
keytool -certreq -alias edi-prod -file edi-certreq.txt -keystore ./edi.keystore -storepass 123456 -keypass password

edi-certreq.txt的檔案內容:
-----BEGIN NEW CERTIFICATE REQUEST-----
MIIBmTCCAQICAQAwWTELMAkGA1UEBhMCVFcxDzANBgNVBAgTBlRhaXBlaTEPMA0GA1UEBxMGVGFp
cGVpMQwwCgYDVQQKEwN3ZWkxDDAKBgNVBAsTA21pczEMMAoGA1UEAxMDbWlzMIGfMA0GCSqGSIb3
DQEBAQUAA4GNADCBiQKBgQClzG0muVpAF+cMOG/PWobKY+vg8l6w6xOF0HgFA3S+3LFV+V79ezLF
Vz3e7L8HeOXM2vTtbm9OdMsbHog8zFUbawyeQ7jZOj74vsxT3RYfPMEFQmQyZYVN+Sd5X9GWX3SB
52l7I0e+1ZKRxC674e9YMGZATzfQIsciJ6vJ76IL3wIDAQABoAAwDQYJKoZIhvcNAQEFBQADgYEA
hz0J99+3Z0sp56lwxzbaVWnnmj1attPX5wQcaCg+NFdUuMcv2nHY/zWZD9p+EdNBBhgBaFqc8hnU
+qO002MBlzWONUPF4qGlTFP+tnZ+zgZAmkTyLEqiqkYmoD6FEYNmNpvW7aMVeNpL+PVpeJY8Dy4l
2z4hifw1fLqSuClIU0A=
-----END NEW CERTIFICATE REQUEST-----
 4.登入 Microsoft Active Directory Certificate Services 網站 http://localhost/certsrv 作申請
->Request a certificate
->advanced certificate request.
->Submit a certificate request by using a base-64-encoded CMC or PKCS #10 file, or submit a renewal request by using a base-64-encoded PKCS #7 file.
選擇 Download certificate chain 將產生的憑證存成 edi-certnew.p7b

5.將edi-certnew.p7b 加入到edi.keystore中:

keytool -import -alias edi-prod(指定導入證書的別名,如果不指定,預設值為mykey,別名是唯一,沒指定對導入會出錯) -file edi-certnew.p7b -keystore ./edi.keystore -storepass 123456 -keypass password

並可查看keystore裡,應有新增一個憑證的資訊:
keytool -list  -v -keystore ./edi.keystore -storepass 123456


1 則留言: