Java 中的 keytool.exe (位於 JDK\Bin 目錄下)可以用來創建數位憑證,所有的數位憑證是以一條一條(採用別名區別)的形式存入證書庫的中,證書庫中的一條證書包含該條證書的私密金鑰,公開金鑰和對應的數位憑證的資訊。證書庫中的一條證書可以匯出數位憑證檔,數位憑證檔只包括主體資訊和對應的公開金鑰。
Keytool是一個Java資料證書的管理工具。
keystore
Keytool將金鑰(key)和證書(certificates)存在一個稱為keystore的檔中在keystore裡,包含兩種資料:
金鑰實體(Key entity)——金鑰(secret key)又或者是私密金鑰和配對公開金鑰(採用非對稱加密)
可信任的證書實體(trusted certificate entries)——只包含公開金鑰
Alias(別名)
每個keystore都關聯這一個獨一無二的alias,這個alias通常不區分大小寫
keystore的存儲位置
在沒有制定生成位置的情況下,keystore會存在與使用者的系統預設目錄,
如:對於window xp系統,會生成在系統的C:\Documents and Settings\UserName\
檔案名為“.keystore”
keystore的生成
引用keytool -genkey -alias tomcat -keyalg RSA keysize 2048 -keystore d:\mykeystore -dname
"CN=localhost, OU=localhost, O=localhost, L=SH, ST=SH, C=CN" -keypass
changeit -storepass -validity 180
參數說明:
-genkey表示要創建一個新的金鑰
-dname表示金鑰的Distinguished Names,
CN=commonName
OU=organizationUnit
O=organizationName
L=localityName
S=stateName
C=country
Distinguished
Names表明了金鑰的發行者身份
-keyalg使用加密的演算法,這裡是RSA
-keysize設定演算法的強度,1024 bit 相當為128Byte,2048相當為256Byte
-keysize設定演算法的強度,1024 bit 相當為128Byte,2048相當為256Byte
-alias金鑰的別名
-keypass私有金鑰的密碼,這裡設置為changeit
-keystore
金鑰保存在D:盤目錄下的mykeystore檔中
-storepass
存取密碼,這裡設置為changeit,這個密碼提供系統從mykeystore檔中將資訊取出
-validity該金鑰的有效期為 180天 (默認為90天)
1,產生一個金鑰對
keytool -genkey -alias mykeypair
-keypass mykeypairpwd
過程如下:
keytool -genkey -alias mykeypair
-keypass mykeypairpwd
輸入keystore密碼: 123456
您的名字與姓氏是什麼?
[Unknown]: fingki
您的組織單位名稱是什麼?
[Unknown]: server
您的組織名稱是什麼?
[Unknown]: server
您所在的城市或區域名稱是什麼?
[Unknown]: bj
您所在的州或省份名稱是什麼?
[Unknown]: bj
該單位的兩字母國家代碼是什麼
[Unknown]: CN
CN=fingki, OU=server, O=server, L=bj,
ST=bj, C=CN 正確嗎?
[否]: y
liqingfeng@liqingfeng:~/WORK_APP/keytooltest$
這樣將產生一個keypair,同時產生一個keystore.默認名是.keystore,存放到user-home目錄
假如你想修改密碼,可以用:
keytool
-keypasswd -alias mykeypair -keypass mykeypairpwd -new newpass
2,產生一個金鑰對,存放在指定的keystore中(加上-keystore 參數)
keytool -genkey -alias mykeypair -keypass
mykeypairpwd -keystore mykeystore
過程與上面的相同。
執行完後,在目前的目錄下產生一個名為mykeystore的keystore,裡面有一個別名為mykeypair的keypair。
3,檢查一個keystore中的內容
keytool -list -v -alias mykeypair
-keystore mykeystore
參數
-v指明要列出詳細資訊
-alias指明列出指定的別名為mykeypair的keypair資訊(不指定則列出所有)
-keystore指明要列出名字為mykeystore的keystore中的資訊
過程如下:
keytool
-list -v -keystore mykeystore
輸入keystore密碼: 123456
Keystore 類型: jks
Keystore 提供者: SUN
您的 keystore 包含 1 輸入
別名名稱: mykeypair
創建日期: 2008-4-16
輸入類型:KeyEntry
認證鏈長度: 1
認證 [1]:
Owner: CN=fingki, OU=server, O=server,
L=bj, ST=bj, C=CN
發照者: CN=fingki, OU=server, O=server, L=bj,
ST=bj, C=CN
序號: 48058c3c
有效期間: Wed Apr 16 13:18:52 GMT+08:00 2008 至: Tue Jul 15 13:18:52 GMT+08:00
2008
認證指紋:
MD5:
FD:C3:97:DC:84:A0:D8:B2:08:6F:26:7F:31:33:C3:05
SHA1:
A3:21:6F:C6:FB:5F:F5:2D:03:DA:71:8C:D3:67:9D:1C:E1:27:A5:11
*******************************************
*******************************************
4,Keystore的產生:
當使用-genkey 或-import或-identitydb命令添加資料到一個keystore,而當這個keystore不存在時,產生一個keystore.默認名是.keystore,存放到user-home目錄.
當用-keystore指定時,將產生指定的keystore.
5,Keystore的實現:
Keytool 類位於java.security包下,提供一個非常好的介面去取得和修改一個keystore中的資訊. 目前有兩個命令列:keytool和jarsinger,一個GUI工具Policy 可以實現keystore.由於keystore是公開的,用戶可以用它寫一些額外的安全應用程式.
Keystore還有一個sun公司提供的內在實現.它把keystore作為一個檔來實現.利用了一個keystore類型(格式)"JKS".它用單獨的密碼保護每一個私有鑰匙.也用可能不同的密碼保護整個keystore的完整性.
支援的演算法和鑰匙大小:
keytool允許使用者指定鑰匙對和註冊密碼服務供應者所提供的簽名演算法.預設的鑰匙對產生演算法是"DSA".假如私有鑰匙是"DSA"類型,預設簽名演算法是"SHA1withDSA",假如私有鑰匙是"RSA"類型, 預設演算法是"MD5withRSA".
當產生一個DSA鑰匙對,鑰匙必須在512-1024位之間.對任何演算法的缺省鑰匙大小是1024位.
6,關於證書
一個證書是一個實體的數位簽章,還包含這個實體的公共鑰匙值.
公共鑰匙 :是一個詳細的實體的數位關聯,並有意讓所有想同這個實體發生信任關係的其他實體知道.公共鑰匙用來檢驗簽名;
數位簽章:是實體資訊用實體的私有鑰匙簽名(加密)後的資料.這條資料可以用這個實體的公共鑰匙來檢驗簽名(解密)出實體資訊以鑒別實體的身份;
簽名:用實體私有鑰匙加密某些消息,從而得到加密資料;
私有鑰匙:是一些數位,私有和公共鑰匙存在所有用公共鑰匙加密的系統的鑰匙對中.公共鑰匙用來加密資料,私有鑰匙用來計算簽名.公開金鑰加密的消息只能用私密金鑰解密,私密金鑰簽名的消息只能用公開金鑰檢驗簽名。
實體:一個實體可以是一個人,一個組織,一個程式,一台電腦,一個商業,一個銀行,或其他你想信任的東西.
實際上,我們用[1]中的命令已經生成了一個自簽名的證書,沒有指定的參數都使用的是預設值。
我們也可以用如下命令生成一個自簽名的證書:
keytool -genkey -dname
"CN=fingki,OU=server,O=server,L=bj,ST=bj,C=CN" -alias myCA -keyalg
RSA -keysize 1024 -keystore myCALib -keypass 654321 -storepass 123456 -validity
3650
這條命令將生成一個別名為myCA的自簽章憑證,證書的keypair的密碼為654321,證書中實體資訊為
"CN=fingki,OU=server,O=server,L=bj,ST=bj,C=CN",存儲在名為myCALib的keystore中(如果 沒有將自動生成一個),這個keystore的密碼為123456,金鑰對產生的演算法指定為RSA,有效期為10年。
7,將證書匯出到證書文件
keytool -export -alias myCA -file myCA.cer
-keystore myCALib -storepass 123456 -rfc
使用該命令從名為myCALib的keystore中,把別名為myCA的證書匯出到證書文件myCA.cer中。(其中-storepass指定keystore的密碼,-rfc指定以可查看編碼的方式輸出,可省略)。
8,通過證書檔查看證書資訊
keytool -printcert -file myCA.cer
9,金鑰庫中證書條目口令的修改
Keytool -keypasswd -alias myCA -keypass
654321 -new newpass -storepass 123456 -keystore myCALib
10,刪除金鑰庫中的證書條目
keytool -delete -alias myCA -keystore
myCALib
11,把一個證書檔導入到指定的金鑰庫
keytool -import -alias myCA -file myCA.cer
-keystore truststore
(如果沒有名為truststore的keystore,將自動創建,將會提示輸入keystore的密碼)
12,更改金鑰庫的密碼
keytool -storepasswd -new 123456 -storepass
789012 -keystore truststore
其中-storepass指定原密碼,-new指定新密碼。
13,將[keystore]導入java信任證書庫
keytool -import -trustcacerts -alias tomcat_pso
-file [keystore] -keypass changeit -keystore "%JAVA_HOME%/jre/lib/security/cacerts"
注:%JAVA_HOME%/jre/lib/security/cacerts為java自帶的證書庫,預設密碼為changeit
keytool
-list -v -keystore c:/jdk15/jre/lib/security/cacerts (列出信任庫中已經存在的證書)
keytool
-delete -trustcacerts -alias tomcat -keystore c:/jdk15/jre/lib/security/cacerts
-storepass changeit(刪除某一個證書)
沒有留言:
張貼留言