Keytool 是一個JAVA環境下的安全鑰匙與證書的管理工具,Keytool將密鑰(key)和證書(certificates)存在一個稱爲keystore 的文件(受密碼保護)中。java
在keystore裏,包含兩種數據:
密鑰實體(Key entity)——密鑰(secret key)又或者是私鑰和配對公鑰(採用非對稱加密)
可信任的證書實體(trusted certificate entries)——只包含公鑰算法
jarsigner是JDK中包含的用於JAR文件簽名和驗證的工具。爲Java檔案文件(JAR)生成簽名,以及對已簽名的jar文件的進行校驗。
windows
JDK中ketyTool經常使用命令:安全
-genkey 在用戶主目錄中建立一個默認文件".keystore",還會產生一個mykey的別名,mykey中包含用戶的公鑰、私鑰和證書,(默認狀況下,keystore會存在用戶系統默認目錄,如:win系統,會生成在C:\Documents and Settings\用戶名\文件名爲「.keystore」)
-alias 產生別名(default:mykey,每一個keystore都關聯這一個獨一無二的alias,不區分大小寫)
-keystore 指定密鑰庫的名稱(產生的各種信息將不在.keystore文件中)
-keyalg 指定密鑰的算法 (如RSA、DSA,default:DSA)
-validity 指定建立的證書有效期多少天(default:90)
-keysize 指定密鑰長度(default:1024,範圍:512 ~ 1024)
-storepass 指定密鑰庫的密碼(獲取keystore信息所需的密碼)
-keypass 指定別名條目的密碼(私鑰的密碼)
-dname 指定證書擁有者信息 ide
例如: "CN=名字與姓氏,OU=組織單位名稱,O=組織名稱,L=城市或區域名稱,ST=州或省份名稱,C=單位的兩字母國家代碼"函數
-list 顯示密鑰庫中的證書信息 工具
keytool -list -v -keystore 指定keystore -storepass 密碼 -v 顯示密鑰庫中的證書詳細信息
-export 將別名指定的證書導出到文件 編碼
keytool -export -alias 須要導出的別名 -keystore 指定keystore -file 指定導出的證書位置及證書名稱 -storepass 密碼
-delete 刪除密鑰庫中某條目 加密
keytool -delete -alias 指定需刪除的keystore別名 -keystore 指定keystore -storepass 密碼
-printcert 查看導出的證書信息url
keytool -printcert -file yushan.crt
-keypasswd 修改密鑰庫中指定條目口令
keytool -keypasswd -alias 需修改的別名 -keypass 舊密碼 -new 新密碼 -storepass keystore密碼 -keystore sage
-storepasswd 修改keystore口令
keytool -storepasswd -keystore e:\yushan.keystore(需修改口令的keystore) -storepass 123456(原始密碼) -new yushan(新密碼)
-import 將已簽名數字證書導入密鑰庫
keytool -import -alias 別名 -keystore指定keystore -file需導入的證書
keytool 使用demo(注:.keystore能夠換成.jks後綴):
一、keystore的生成:
分階段生成:
keytool -genkey -alias yushan(別名) -keypass yushan(別名密碼) -keyalg RSA(算法) -keysize 1024(密鑰長度) -validity 365(有效期,天單位) -keystore
e:\yushan.keystore(指定生成證書的位置和證書名稱) -storepass 123456(獲取keystore信息的密碼);
回車輸入相關信息便可;
一次性生成:
keytool -genkey -alias yushan -keypass yushan -keyalg RSA -keysize 1024 -validity 365 -keystore e:\yushan.keystore -storepass 123456 -dname "CN=(名字與
姓氏), OU=(組織單位名稱), O=(組織名稱), L=(城市或區域名稱), ST=(州或省份名稱), C=(單位的兩字母國家代碼)";
(中英文皆可)
二、keystore信息的查看:
keytool -list -v -keystore e:\keytool\yushan.keystore -storepass 123456
顯示內容:
Keystore 類型: JKS Keystore 提供者: SUN 您的 keystore 包含 1 輸入 別名名稱: yushan 建立日期: 2009-7-29 項類型: PrivateKeyEntry 認證鏈長度: 1 認證 [1]: 全部者:CN=yushan, OU=xx公司, O=xx協會, L=湘潭, ST=湖南, C=中國 簽發人:CN=yushan, OU=xx公司, O=xx協會, L=湘潭, ST=湖南, C=中國 序列號:4a6f29ed 有效期: Wed Jul 29 00:40:13 CST 2009 至Thu Jul 29 00:40:13 CST 2010 證書指紋: MD5:A3:D7:D9:74:C3:50:7D:10:C9:C2:47:B0:33:90:45:C3 SHA1:2B:FC:9E:3A:DF:C6:C4:FB:87:B8:A0:C6:99:43:E9:4C:4A:E1:18:E8 簽名算法名稱:SHA1withRSA 版本: 3
缺省狀況下,-list 命令打印證書的 MD5 指紋。而若是指定了 -v 選項,將以可讀格式打印證書,若是指定了 -rfc 選項,將以可打印的編碼格式輸出證書。
keytool -list -rfc -keystore e:\yushan.keystore -storepass 123456
顯示:
Keystore 類型: JKS Keystore 提供者: SUN 您的 keystore 包含 1 輸入 別名名稱: yushan 建立日期: 2009-7-29 項類型: PrivateKeyEntry 認證鏈長度: 1 認證 [1]: -----BEGIN CERTIFICATE----- MIICSzCCAbSgAwIBAgIESm8p7TANBgkqhkiG9w0BAQUFADBqMQ8wDQYDVQQGDAbkuK3lm70xDzAN BgNVBAgMBua5luWNlzEPMA0GA1UEBwwG5rmY5r2tMREwDwYDVQQKDAh4eOWNj+S8mjERMA8GA1UE CwwIeHjlhazlj7gxDzANBgNVBAMTBnl1c2hhbjAeFw0wOTA3MjgxNjQwMTNaFw0xMDA3MjgxNjQw MTNaMGoxDzANBgNVBAYMBuS4reWbvTEPMA0GA1UECAwG5rmW5Y2XMQ8wDQYDVQQHDAbmuZjmva0x ETAPBgNVBAoMCHh45Y2P5LyaMREwDwYDVQQLDAh4eOWFrOWPuDEPMA0GA1UEAxMGeXVzaGFuMIGf MA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCJoru1RQczRzTnBWxefVNspQBykS220rS8Y/oX3mZa hjL4wLfOURzUuxxuVQR2jx7QI+XKME+DHQj9r6aAcLBCi/T1jwF8mVYxtpRuTzE/6KEZdhowEe70 liWLVE+hytLBHZ03Zhwcd6q5HUMu27du3MPQvqiwzTY7MrwIvQQ8iQIDAQABMA0GCSqGSIb3DQEB BQUAA4GBAGoQQ1/FnTfkpQh+Ni6h3fZdn3sR8ZzDMbOAIYVLAhBb85XDJ8QZTarHbZMJcIdHxAl1 i08ct3E8U87V9t8GZFWVC4BFg/+zeFEv76SFpVE56iX7P1jpsu78z0m69hHlds77VJTdyfMSvtXv sYHP3fxfzx9WyhipBwd8VPK/NgEP -----END CERTIFICATE-----
三、證書的導出:
keytool -export -alias yushan -keystore e:\yushan.keystore -file e:\yushan.crt -storepass 123456
四、查看導出的證書信息
keytool -printcert -file yushan.crt
顯示:(在windows下能夠雙擊yushan.crt查看)
全部者:CN=yushan, OU=xx公司, O=xx協會, L=湘潭, ST=湖南, C=中國 簽發人:CN=yushan, OU=xx公司, O=xx協會, L=湘潭, ST=湖南, C=中國 序列號:4a6f29ed 有效期: Wed Jul 29 00:40:13 CST 2009 至Thu Jul 29 00:40:13 CST 2010 證書指紋: MD5:A3:D7:D9:74:C3:50:7D:10:C9:C2:47:B0:33:90:45:C3 SHA1:2B:FC:9E:3A:DF:C6:C4:FB:87:B8:A0:C6:99:43:E9:4C:4A:E1:18:E8 簽名算法名稱:SHA1withRSA 版本: 3
五、證書的導入:
準備一個導入的證書:
keytool -genkey -alias shuany -keypass shuany -keyalg RSA -keysize 1024 -validity 365 -keystore e:\shuany.keystore -storepass 123456 -dname "CN=shuany,
OU=xx, O=xx, L=xx, ST=xx, C=xx";
keytool -export -alias shuany -keystore e:\shuany.keystore -file e:\shuany.crt -storepass 123456
如今將shuany.crt 加入到yushan.keystore中:
keytool -import -alias shuany(指定導入證書的別名,若是不指定默認爲mykey,別名惟一,不然導入出錯) -file e:\shuany.crt -keystore e:\yushan.keystore -storepass
123456
keytool -list -v -keystore e:\keytool\yushan.keystore -storepass 123456
顯示:
Keystore 類型: JKS Keystore 提供者: SUN 您的 keystore 包含 2 輸入 別名名稱: yushan 建立日期: 2009-7-29 項類型: PrivateKeyEntry 認證鏈長度: 1 認證 [1]: 全部者:CN=yushan, OU=xx公司, O=xx協會, L=湘潭, ST=湖南, C=中國 簽發人:CN=yushan, OU=xx公司, O=xx協會, L=湘潭, ST=湖南, C=中國 序列號:4a6f29ed 有效期: Wed Jul 29 00:40:13 CST 2009 至Thu Jul 29 00:40:13 CST 2010 證書指紋: MD5:A3:D7:D9:74:C3:50:7D:10:C9:C2:47:B0:33:90:45:C3 SHA1:2B:FC:9E:3A:DF:C6:C4:FB:87:B8:A0:C6:99:43:E9:4C:4A:E1:18:E8 簽名算法名稱:SHA1withRSA 版本: 3 ******************************************* ******************************************* 別名名稱: shuany 建立日期: 2009-7-29 輸入類型: trustedCertEntry 全部者:CN=shuany, OU=xx, O=xx, L=xx, ST=xx, C=xx 簽發人:CN=shuany, OU=xx, O=xx, L=xx, ST=xx, C=xx 序列號:4a6f2cd9 有效期: Wed Jul 29 00:52:41 CST 2009 至Thu Jul 29 00:52:41 CST 2010 證書指紋: MD5:15:03:57:9B:14:BD:C5:50:21:15:47:1E:29:87:A4:E6 SHA1:C1:4F:8B:CD:5E:C2:94:77:B7:42:29:35:5C:BB:BB:2E:9E:F0:89:F5 簽名算法名稱:SHA1withRSA 版本: 3 ******************************************* *******************************************
六、證書條目的刪除:
keytool -delete -alias shuany -keystore yushan.keystore -storepass 123456
七、證書條目口令的修改:
keytool -keypasswd -alias yushan -keypass yushan -new 123456 -keystore e:\yushan.keystore -storepass 123456
八、keystore口令的修改:
keytool -storepasswd -keystore e:\yushan.keystore -storepass 123456 -new yushan
九、修改keystore中別名爲yushan的信息
keytool -selfcert -alias yushan -keypass yushan -keystore e:\yushan.keystore -storepass 123456 -dname "cn=yushan,ou=yushan,o=yushan,c=us"
jarsigner工具簡介
jarsigner工具主要有如下兩個做用:
a.對JAR文件簽名 jarsigner [ options ] jarfile alias
b.校驗簽名以及簽名JAR文件的完整性 jarsigner -verify [ options ] jarfile
JAR文件能夠同時包含多個package的類文件,圖片,聲音以及數字數據,一邊更快更方便的發佈。jar工具用來建立JAR文件,從技術角度來講,任何zip文件均可以被看做是JAR文件,雖然使用jar建立的JAR文件包含META-INF/MANIFEST.MF文件。
數字簽名是從一個實體(人、公司等)的某些數據(正被「簽名」的數據)和私鑰計算出來的位串。與手寫的簽名同樣,數字簽名有不少有用的特性:
1.真實性2.不可能被僞造(假設私鑰沒有泄露)3.已簽名的數據不能被修改;若是被修改了,簽名將再也不被校驗爲可信的。
爲了給文件生成實體的簽名,該實體首先必須與一對公/私鑰相關聯,以及一個或多個鑑別其公鑰的證書。證書是來自一個實體的已被數字簽署的聲明,表示某個其它實體的公鑰有特定值。
使用keytool 建立和管理密鑰倉庫(keystore)後,jarsigner 使用來自密鑰倉庫(keystore)的密鑰和證書信息爲 JAR 文件生成數字簽名。
語法參數:
jarsigner -verify [選項] jar 文件
[-keystore <url>] 密鑰庫位置
[-storepass <口令>] 用於密鑰庫完整性的口令
[-storetype <類型>] 密鑰庫類型
[-keypass <口令>] 專用密鑰的口令(若是不一樣)
[-sigfile <文件>] .SF/.DSA 文件的名稱
[-signedjar <文件>] 已簽名的 JAR 文件的名稱
[-digestalg <算法>] 摘要算法的名稱
[-sigalg <算法>] 簽名算法的名稱
[-verify] 驗證已簽名的 JAR 文件
[-verbose] 簽名/驗證時輸出詳細信息
[-certs] 輸出詳細信息和驗證時顯示證書
[-tsa <url>] 時間戳機構的位置
[-tsacert <別名>] 時間戳機構的公共密鑰證書
[-altsigner <類>] 替代的簽名機制的類名
[-altsignerpath <路徑列表>] 替代的簽名機制的位置
[-internalsf] 在簽名塊內包含 .SF 文件
[-sectionsonly] 不計算整個清單的散列
[-protected] 密鑰庫已保護驗證路徑
[-providerName <名稱>] 提供者名稱
[-providerClass <類> 加密服務提供者的名稱
[-providerArg <參數>]] ... 主類文件和構造函數參數
使用demo:
C:\>jar cf pg.jar org\*.*
C:\>jarsigner -storetype jks -keystore c:\mykeystore.keystore -digestalg MD5 -sigalg MD5withRSA -signedjar pgsigned.jar pg.jar myalias
C:\>jarsigner -verify pgsigned.jar
修改MYALIAS.SF文件的內容,而後再校驗:
C:\>jarsigner -verify pgsigned.jar
附:Java KeyStore的類型
JKS和JCEKS是Java密鑰庫(KeyStore)的兩種比較常見類型(我所知道的共有5種,JKS, JCEKS, PKCS12, BKS,UBER)。
JKS的Provider是SUN,在每一個版本的JDK中都有,JCEKS的Provider是SUNJCE,1.4後咱們都可以直接使用它。
JCEKS在安全級別上要比JKS強,使用的Provider是JCEKS(推薦),尤爲在保護KeyStore中的私鑰上(使用TripleDes)。
PKCS#12是公鑰加密標準,它規定了可包含全部私鑰、公鑰和證書。其以二進制格式存儲,也稱爲 PFX 文件,在windows中能夠直接導入到密鑰區,注意,PKCS#12的密鑰庫保護密碼同時也用於保護Key。
BKS 來自BouncyCastle Provider,它使用的也是TripleDES來保護密鑰庫中的Key,它可以防止證書庫被不當心修改(Keystore的keyentry改掉1個 bit都會產生錯誤),BKS可以跟JKS互操做,讀者能夠用Keytool去TryTry。
UBER比較特別,當密碼是經過命令行提供的時候,它只能跟keytool交互。整個keystore是經過PBE/SHA1/Twofish加密,所以keystore可以防止被誤改、察看以及校驗。之前,Sun JDK(提供者爲SUN)容許你在不提供密碼的狀況下直接加載一個Keystore,相似cacerts,UBER不容許這種狀況。