java keytool證書工具使用小結【轉】


 java keytool證書工具使用小結

 keytool導入導出多條目對比

在Security編程中,有幾種典型的密碼交換信息文件格式:


    DER-encoded certificate: .cer, .crt
    PEM-encoded message: .pem
    PKCS#12 Personal Information Exchange: .pfx, .p12
    PKCS#10 Certification Request: .p10
    PKCS#7 cert request response: .p7r
    PKCS#7 binary message: .p7b

  .cer/.crt是用於存放證書,它是2進制形式存放的,不含私鑰。
    .pem跟crt/cer的區別是它以Ascii來表示。
    pfx/p12用於存放個人證書/私鑰,他通常包含保護密碼,2進制方式
    p10是證書請求
    p7r是CA對證書請求的回復,只用於導入
    p7b以樹狀展示證書鏈(certificate chain),同時也支持單個證書,不含私鑰。

keytool簡介

Keytool 是一個Java數據證書的管理工具 ,Keytool將密鑰(key)和證書(certificates)存在一個稱為keystore的文件中.

在keystore里,包含兩種數據:

密鑰實體(Key entity)-密鑰(secret key) 或者是

私鑰和配對公鑰(采用非對稱加密)可信任的證書實體(trusted certificate entries)-只包含公鑰.

 

keytool常用參數說明

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 需導入的證書

 

目錄說明:

  1. 生成證書
  2. 查看證書
  3. 證書導出
  4. 客戶端導入證書
  5. 附錄資料

一、生成證書

 按win鍵+R,彈出運行窗口,輸入 cmd 回車,打開命令行窗戶,輸入如下命令:
  keytool -genkey -alias michaelkey -keyalg RSA -keysize 1024 -keypass michaelpwd -validity 365 -keystore g:\sso\michael.keystore -storepass michaelpwd2
截圖如下:
 

二、查看證書

缺省情況下,-list 命令打印證書的 MD5 指紋。而如果指定了 -v 選項,將以可讀格式打印證書,如果指定了 -rfc 選項,將以可打印的編碼格式輸出證書。

-v 命令如下:
  keytool -list  -v -keystore g:\sso\michael.keystore -storepass michaelpwd2
回車看到的信息如下:
 
-rfc 命令如下:
 
keytool -list -rfc -keystore g:\sso\michael.keystore -storepass michaelpwd2
 
回車看到的信息如下:
 

三、證書的導出和查看:

導出證書命令:
  keytool -export -alias michaelkey -keystore g:\sso\michael.keystore -file g:\sso\michael.crt -storepass michaelpwd2
回車如下:
 
查看導出的證書信息:
  keytool -printcert -file g:\sso\michael.crt
回車看到信息如下:

  

 

四、客戶端導入證書:

keytool -import -keystore %JAVA_HOME%\jre\lib\security\cacerts -fileg:\sso\ssodemo.crt -alias ssodemo

 

五、官方有關keytool命令的介紹文檔:

  • jdk1.4.2 :http://docs.oracle.com/javase/1.4.2/docs/tooldocs/windows/keytool.html
  • jdk1.6    :http://docs.oracle.com/javase/6/docs/technotes/tools/windows/keytool.html
  • jdk1.7    :http://docs.oracle.com/javase/7/docs/technotes/tools/windows/keytool.html

 

 六.我自己的證書生成命令

<!--   ok  -->
keytool -genkey -alias king -keyalg RSA -keysize 1024 -keypass kingkp -storepass kingsp -validity 365 -keystore d:\temp\king.keystore 

<!--   ok  -->
keytool -list -v -keystore d:\temp\king.keystore -storepass kingsp

<!--   ok  -->
keytool -export -alias king -keystore d:\temp\king.keystore -file d:\temp\king.crt -storepass kingsp

<!--   ok  -->
keytool -printcert -file d:\temp\king.crt

 

七 java代碼使用storepass和keypass的地方

KeyStore keyStore keyStore = KeyStore.getInstance("JKS");
keyStore.load(fis, storepass.toCharArray());

PrivateKey privateKey = (PrivateKey) keyStore.getKey(keyAlias, keypass.toCharArray());

 如果出現Data must not be longer than 117 bytes。異常,可分段加密和分段解密

我的其它相關鏈接

keytool導入導出多條目對比

java keytool證書工具使用小結【轉】

 

本文完全引用自 : http://blog.163.com/pengfang@yeah/blog/static/623930532013416111012845/

其它參考1: http://www.cnblogs.com/xdp-gacl/p/3750965.html

其它參考2: http://blog.csdn.net/jy_he/article/details/51838566


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM