java 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 需導入的證書
目錄說明:
- 生成證書
- 查看證書
- 證書導出
- 客戶端導入證書
- 附錄資料
一、生成證書
keytool -genkey - alias michaelkey -keyalg RSA -keysize 1024 -keypass michaelpwd -validity 365 -keystore g:\sso\michael.keystore -storepass michaelpwd2 |

二、查看證書
缺省情況下,-list 命令打印證書的 MD5 指紋。而如果指定了 -v 選項,將以可讀格式打印證書,如果指定了 -rfc 選項,將以可打印的編碼格式輸出證書。
keytool -list - v -keystore g:\sso\michael.keystore -storepass michaelpwd2 |

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。異常,可分段加密和分段解密
我的其它相關鏈接
本文完全引用自 : http://blog.163.com/pengfang@yeah/blog/static/623930532013416111012845/