The NoteBook of EricKong

            BlogJava :: 首頁 :: 聯(lián)系 :: 聚合  :: 管理
            611 Posts :: 1 Stories :: 190 Comments :: 0 Trackbacks

          Keytool是一個(gè)Java數(shù)據(jù)證書的管理工具。

           

          keystore

          Keytool將密鑰(key)和證書(certificates)存在一個(gè)稱為keystore的文件中

          keystore里,包含兩種數(shù)據(jù): 密鑰實(shí)體(Key entity)——密鑰(secret key)又或者是私鑰和配對(duì)公鑰(采用非對(duì)稱加密)

          可信任的證書實(shí)體(trusted certificate entries)——只包含公鑰

           

          Alias(別名)

          每個(gè)keystore都關(guān)聯(lián)這一個(gè)獨(dú)一無二的alias這個(gè)alias通常不區(qū)分大小寫

           

          keystore的存儲(chǔ)位置

          在沒有制定生成位置的情況下,keystore會(huì)存在與用戶的系統(tǒng)默認(rèn)目錄,

          如:對(duì)于window xp系統(tǒng),會(huì)生成在系統(tǒng)的C:\Documents and Settings\UserName\

          文件名為“.keystore

           

          keystore的生成

          引用

          keytool -genkey -alias tomcat -keyalg RSA -keystore d:\mykeystore -dname "CN=localhost, OU=localhost, O=localhost, L=SH, ST=SH, C=CN" -keypass changeit -storepass -validity 180

           

          參數(shù)說明:

          -genkey表示要?jiǎng)?chuàng)建一個(gè)新的密鑰

          -dname表示密鑰的Distinguished Names

          CN=commonName

          OU=organizationUnit

          O=organizationName

          L=localityName

          S=stateName

          C=country

          Distinguished Names表明了密鑰的發(fā)行者身份

          -keyalg使用加密的算法,這里是RSA

          -alias密鑰的別名

          -keypass私有密鑰的密碼,這里設(shè)置為changeit

          -keystore 密鑰保存在D:盤目錄下的mykeystore文件中

          -storepass 存取密碼,這里設(shè)置為changeit,這個(gè)密碼提供系統(tǒng)從mykeystore文件中將信息取出

          -validity該密鑰的有效期為 180 (默認(rèn)為90)

           

          cacerts證書文件(The cacerts Certificates File)

          該證書文件存在于java.home\jre\lib\security目錄下,是Java系統(tǒng)的CA證書倉庫

           

          創(chuàng)建證書

          1.服務(wù)器中生成證書(注:生成證書時(shí),CN要和服務(wù)器的域名相同,如果在本地測試,則使用localhost)

          keytool -genkey -alias tomcat -keyalg RSA -keystore d:\mykeystore-dname "CN=localhost, OU=localhost, O=localhost, L=SH, ST=SH, C=CN"-keypass changeit -storepass changeit

          2.導(dǎo)出證書,由客戶端安裝:

          keytool -export -alias tomcat -keystore d:\mykeystore -file d:\mycerts.cer -storepass changeit

          3.客戶端配置:為客戶端的JVM導(dǎo)入密鑰(將服務(wù)器下發(fā)的證書導(dǎo)入到JVM)

          keytool -import -trustcacerts -alias tomcat -keystore "%JAVA_HOME%/jre/lib/security/cacerts " -file d:\mycerts.cer -storepass changeit

          生成的證書可以交付客戶端用戶使用,用以進(jìn)行SSL通訊,或者伴隨電子簽名的jar包進(jìn)行發(fā)布者的身份認(rèn)證。

          常出現(xiàn)的異常:“未找到可信任的證書”--主要原因?yàn)樵诳蛻舳宋磳⒎?wù)器下發(fā)的證書導(dǎo)入到JVM中,可以用

          keytool -list -alias tomcat -keystore "%JAVA_HOME%/JRE/LIB/SECURITY/CACERTS" -storepass changeit

          linux: #keytool -list -alias tomcat -keystore "$JAVA_HOME/jre/lib/security/cacerts" -storepass changeit

          來查看證書是否真的導(dǎo)入到JVM中。

          keytool生成根證書時(shí)出現(xiàn)如下錯(cuò)誤:

          keytool錯(cuò)誤:java.io.IOException:keystore was tampered with,or password was incorrect

          原因是在你的home目錄下是否還有.keystore存在。如果存在那么把他刪除掉,然后再執(zhí)行

          或者刪除"%JAVA_HOME%/jre/lib/security/cacerts 再執(zhí)行


          數(shù)字證書中keytool命令使用說明
          這個(gè)命令一般在JDK\jre\lib\security\目錄下操作 
          keytool常用命令 
          -alias       產(chǎn)生別名 
          -keystore    指定密鑰庫的名稱(就像數(shù)據(jù)庫一樣的證書庫,可以有很多個(gè)證書,cacerts這個(gè)文件是jre自帶的, 
                       你也可以使用其它文件名字,如果沒有這個(gè)文件名字,它會(huì)創(chuàng)建這樣一個(gè)) 
          -storepass   指定密鑰庫的密碼 
          -keypass     指定別名條目的密碼 
          -list        顯示密鑰庫中的證書信息 
          -v           顯示密鑰庫中的證書詳細(xì)信息 
          -export      將別名指定的證書導(dǎo)出到文件 
          -file        參數(shù)指定導(dǎo)出到文件的文件名 
          -delete      刪除密鑰庫中某條目 
          -import      將已簽名數(shù)字證書導(dǎo)入密鑰庫 
          -keypasswd   修改密鑰庫中指定條目口令 
          -dname       指定證書擁有者信息 
          -keyalg      指定密鑰的算法 
          -validity    指定創(chuàng)建的證書有效期多少天 
          -keysize     指定密鑰長度 
          使用說明: 
          導(dǎo)入一個(gè)證書命令可以如下: 
          keytool -import -keystore cacerts -storepass 666666 -keypass 888888 -alias alibabacert -file C:\alibabajava\cert\test_root.cer 
          其中-keystore cacerts中的cacerts是jre中默認(rèn)的證書庫名字,也可以使用其它名字 
          -storepass 666666中的666666是這個(gè)證書庫的密碼 
          -keypass 888888中的888888是這個(gè)特定證書的密碼 
          -alias alibabacert中的alibabacert是你導(dǎo)入證書的別名,在其它操作命令中就可以使用它 
          -file C:\alibabajava\cert\test_root.cer中的文件路徑就是要導(dǎo)入證書的路徑 
          瀏覽證書庫里面的證書信息,可以使用如下命令: 
          keytool -list -v -alias alibabacert -keystore cacerts -storepass 666666 
          要?jiǎng)h除證書庫里面的某個(gè)證書,可以使用如下命令: 
          keytool -delete -alias alibabacert -keystore cacerts -storepass 666666 
          要導(dǎo)出證書庫里面的某個(gè)證書,可以使用如下命令: 
          keytool -export -keystore cacerts -storepass 666666 -alias alibabacert -file F:\alibabacert_root.cer 
          要修改某個(gè)證書的密碼(注意:有些數(shù)字認(rèn)證沒有私有密碼,只有公匙,這種情況此命令無效) 
          這個(gè)是交互式的,在輸入命令后,會(huì)要求你輸入密碼 
          keytool -keypasswd -alias alibabacert -keystore cacerts 
          這個(gè)不是交互式的,輸入命令后直接更改 
          Keytool -keypasswd -alias alibabacert -keypass 888888 -new 123456 -storepass 666666 -keystore cacerts


          Keytool 是一個(gè)Java 數(shù)據(jù)證書的管理工具 ,Keytool 將密鑰(key)和證書(certificates)存在一個(gè)稱為keystore的文件中 在keystore里,包含兩種數(shù)據(jù): 
          密鑰實(shí)體(Key entity)——密鑰(secret key)又或者是私鑰和配對(duì)公鑰(采用非對(duì)稱加密) 
          可信任的證書實(shí)體(trusted certificate entries)——只包含公鑰


          ailas(別名)每個(gè)keystore都關(guān)聯(lián)這一個(gè)獨(dú)一無二的alias,這個(gè)alias通常不區(qū)分大小寫

           

          JDK中keytool 常用命令: 

          -genkey      在用戶主目錄中創(chuàng)建一個(gè)默認(rèn)文件".keystore",還會(huì)產(chǎn)生一個(gè)mykey的別名,mykey中包含用戶的公鑰、私鑰和證書
          (在沒有指定生成位置的情況下,keystore會(huì)存在用戶系統(tǒng)默認(rèn)目錄,如:對(duì)于window xp系統(tǒng),會(huì)生成在系統(tǒng)的C:/Documents and Settings/UserName/文件名為“.keystore”)
          -alias       產(chǎn)生別名
          -keystore    指定密鑰庫的名稱(產(chǎn)生的各類信息將不在.keystore文件中)
          -keyalg      指定密鑰的算法 (如 RSA  DSA(如果不指定默認(rèn)采用DSA))
          -validity    指定創(chuàng)建的證書有效期多少天
          -keysize     指定密鑰長度
          -storepass   指定密鑰庫的密碼(獲取keystore信息所需的密碼)
          -keypass     指定別名條目的密碼(私鑰的密碼)
          -dname       指定證書擁有者信息 例如:  "CN=名字與姓氏,OU=組織單位名稱,O=組織名稱,L=城市或區(qū)域名稱,ST=州或省份名稱,C=單位的兩字母國家代碼"
          -list        顯示密鑰庫中的證書信息      keytool -list -v -keystore 指定keystore -storepass 密碼
          -v           顯示密鑰庫中的證書詳細(xì)信息
          -export      將別名指定的證書導(dǎo)出到文件  keytool -export -alias 需要導(dǎo)出的別名 -keystore 指定keystore -file 指定導(dǎo)出的證書位置及證書名稱 -storepass 密碼
          -file        參數(shù)指定導(dǎo)出到文件的文件名
          -delete      刪除密鑰庫中某條目          keytool -delete -alias 指定需刪除的別  -keystore 指定keystore  -storepass 密碼
          -printcert   查看導(dǎo)出的證書信息          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      將已簽名數(shù)字證書導(dǎo)入密鑰庫  keytool -import -alias 指定導(dǎo)入條目的別名 -keystore 指定keystore -file 需導(dǎo)入的證書

           

          下面是各選項(xiàng)的缺省值。 
          -alias "mykey"

          -keyalg "DSA"

          -keysize 1024

          -validity 90

          -keystore 用戶宿主目錄中名為 .keystore 的文件

          -file 讀時(shí)為標(biāo)準(zhǔn)輸入,寫時(shí)為標(biāo)準(zhǔn)輸出
           
                     


          1、keystore的生成: 

          分階段生成:
               keytool -genkey -alias yushan(別名) -keypass yushan(別名密碼) -keyalg RSA(算法) -keysize 1024(密鑰長度) -validity 365(有效期,天單位) -keystore         

          e:/yushan.keystore(指定生成證書的位置和證書名稱) -storepass 123456(獲取keystore信息的密碼);回車輸入相關(guān)信息即可;
               
          一次性生成:
               keytool -genkey -alias yushan -keypass yushan -keyalg RSA -keysize 1024 -validity 365 -keystore  e:/yushan.keystore -storepass 123456 -dname "CN=(名字與

          姓氏), OU=(組織單位名稱), O=(組織名稱), L=(城市或區(qū)域名稱), ST=(州或省份名稱), C=(單位的兩字母國家代碼)";(中英文即可)

          2、keystore信息的查看: 
             keytool -list  -v -keystore e:/keytool /yushan.keystore -storepass 123456
             顯示內(nèi)容:
          ---------------------------------------------------------------------
             Keystore 類型: JKS
          Keystore 提供者: SUN

          您的 keystore 包含 1 輸入

          別名名稱: yushan
          創(chuàng)建日期: 2009-7-29
          項(xiàng)類型: PrivateKeyEntry
          認(rèn)證鏈長度: 1
          認(rèn)證 [1]:
          所有者:CN=yushan, OU=xx公司, O=xx協(xié)會(huì), L=湘潭, ST=湖南, C=中國
          簽發(fā)人:CN=yushan, OU=xx公司, O=xx協(xié)會(huì), L=湘潭, ST=湖南, C=中國
          序列號(hào):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 選項(xiàng),將以可讀格式打印證書,如果指定了 -rfc 選項(xiàng),將以可打印的編碼格式輸出證書。


          keytool -list  -rfc -keystore e:/yushan.keystore -storepass 123456

          顯示:

          -------------------------------------------------------------------------------------------------------

          Keystore 類型: JKS
          Keystore 提供者: SUN

          您的 keystore 包含 1 輸入

          別名名稱: yushan
          創(chuàng)建日期: 2009-7-29
          項(xiàng)類型: PrivateKeyEntry
          認(rèn)證鏈長度: 1
          認(rèn)證 [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-----

          -------------------------------------------------------------------------------------------------------

          3、證書的導(dǎo)出: 

          keytool -export -alias yushan -keystore e:/yushan.keystore -file e:/yushan.crt(指定導(dǎo)出的證書位置及證書名稱) -storepass 123456

          4、查看導(dǎo)出的證書信息 
             keytool -printcert -file yushan.crt
             顯示:(在windows下可以雙擊yushan.crt查看)
          -----------------------------------------------------------------------
          所有者:CN=yushan, OU=xx公司, O=xx協(xié)會(huì), L=湘潭, ST=湖南, C=中國
          簽發(fā)人:CN=yushan, OU=xx公司, O=xx協(xié)會(huì), L=湘潭, ST=湖南, C=中國
          序列號(hào):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
          -----------------------------------------------------------------------

          5、證書的導(dǎo)入: 
             準(zhǔn)備一個(gè)導(dǎo)入的證書:
             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
           
            現(xiàn)在將shuany.crt 加入到y(tǒng)ushan.keystore中:
            keytool -import -alias shuany(指定導(dǎo)入證書的別名,如果不指定默認(rèn)為mykey,別名唯一,否則導(dǎo)入出錯(cuò)) -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
          創(chuàng)建日期: 2009-7-29
          項(xiàng)類型: PrivateKeyEntry
          認(rèn)證鏈長度: 1
          認(rèn)證 [1]:
          所有者:CN=yushan, OU=xx公司, O=xx協(xié)會(huì), L=湘潭, ST=湖南, C=中國
          簽發(fā)人:CN=yushan, OU=xx公司, O=xx協(xié)會(huì), L=湘潭, ST=湖南, C=中國
          序列號(hào):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
          創(chuàng)建日期: 2009-7-29
          輸入類型: trustedCertEntry

          所有者:CN=shuany, OU=xx, O=xx, L=xx, ST=xx, C=xx
          簽發(fā)人:CN=shuany, OU=xx, O=xx, L=xx, ST=xx, C=xx
          序列號(hào):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


          *******************************************
          *******************************************
          ------------------------------------------------------------------------------

          6、證書條目的刪除: 
           keytool -delete -alias shuany(指定需刪除的別名) -keystore yushan.keystore -storepass 123456
            
          7、證書條目口令的修改: 
          keytool -keypasswd -alias yushan(需要修改密碼的別名) -keypass yushan(原始密碼) -new 123456(別名的新密碼)  -keystore e:/yushan.keystore -storepass 123456

          8、keystore口令的修改: 
           keytool -storepasswd -keystore e:/yushan.keystore(需修改口令的keystore) -storepass 123456(原始密碼) -new yushan(新密碼)

           

          9、修改keystore中別名為yushan的信息

           

          keytool -selfcert -alias yushan -keypass yushan -keystore e:/yushan.keystore -storepass 123456 -dname "cn=yushan,ou=yushan,o=yushan,c=us"



           

          posted on 2013-06-20 11:51 Eric_jiang 閱讀(5738) 評(píng)論(3)  編輯  收藏 所屬分類: Java

          Feedback

          # re: keytool工具應(yīng)用實(shí)例詳解 2013-12-20 16:28 wfifi
          刪除"%JAVA_HOME%/jre/lib/security/cacerts  回復(fù)  更多評(píng)論
            

          # re: keytool工具應(yīng)用實(shí)例詳解 2013-12-20 16:30 wfifi
          刪除"%JAVA_HOME%/jre/lib/security/cacerts會(huì)有問題,這個(gè)密鑰庫已經(jīng)有些重要的密鑰,如apache之類,刪除后可能會(huì)導(dǎo)致maven(3.0.5)訪問https的倉庫失敗。  回復(fù)  更多評(píng)論
            

          # re: keytool工具應(yīng)用實(shí)例詳解 2015-10-20 11:12 bk201
          請問怎么根據(jù)cer證書生成子證書呢  回復(fù)  更多評(píng)論
            

          主站蜘蛛池模板: 扎兰屯市| 甘孜县| 遂宁市| 延津县| 衢州市| 南丰县| 仁怀市| 历史| 长沙市| 海原县| 呼和浩特市| 福贡县| 玛多县| 承德市| 泰和县| 伊川县| 年辖:市辖区| 信宜市| 金寨县| 邢台市| 大厂| 岗巴县| 莱州市| 赣榆县| 吐鲁番市| 惠州市| 陈巴尔虎旗| 吉林市| 罗平县| 唐河县| 库尔勒市| 大田县| 普格县| 元朗区| 池州市| 凌云县| 泾源县| 隆德县| 固原市| 西丰县| 锡林浩特市|