Calvin's Tech Space

          成于堅忍,毀于浮躁

             :: 首頁 :: 聯(lián)系 :: 聚合  :: 管理

          公告

          搜索

          •  

          最新評論


          Java 自帶的 keytool 工具 是個密鑰和證書管理工具。它使用戶能夠管理自己的公鑰 / 私鑰對及相關(guān)證書,用于(通過數(shù)字簽名)自我認(rèn)證(用戶向別的用戶 / 服務(wù)認(rèn)證自己)或數(shù)據(jù)完整性以及認(rèn)證服務(wù)。它還允許用戶儲存他們的通信對等者的公鑰(以證書形式)。

          keytool 將密鑰和證書儲存在一個所謂的 密鑰倉庫( keystore 中。缺省的密鑰倉庫實(shí)現(xiàn)將密鑰倉庫實(shí)現(xiàn)為一個文件。它用口令來保護(hù)私鑰。

          Java KeyStore 的類型

          JKS JCEKS Java 密鑰庫 (KeyStore) 的兩種比較常見類型 ( 我所知道的共有 5 種, JKS, JCEKS, PKCS12, BKS , UBER) 。

          JKS Provider SUN ,在每個版本的 JDK 中都有, JCEKS Provider SUNJCE , 1.4 后我們都能夠直接使用它。

          JCEKS 在安全級別上要比 JKS 強(qiáng),使用的 Provider JCEKS( 推薦 ) ,尤其在保護(hù) KeyStore 中的私鑰上(使用 TripleDes )。

          PKCS#12 是公鑰加密標(biāo)準(zhǔn),它規(guī)定了可包含所有私鑰、公鑰和證書。其以二進(jìn)制格式存儲,也稱為 PFX 文件,在 windows 中可以直接導(dǎo)入到密鑰區(qū),注意, PKCS#12 的密鑰庫保護(hù)密碼同時也用于保護(hù) Key

          BKS 來自 BouncyCastle Provider ,它使用的也是 TripleDES 來保護(hù)密鑰庫中的 Key ,它能夠防止證書庫被不小心修改( Keystore keyentry 改掉 1 bit 都會產(chǎn)生錯誤), BKS 能夠跟 JKS 互操作,讀者可以用 Keytool TryTry 。

          UBER 比較特別,當(dāng)密碼是通過命令行提供的時候,它只能跟 keytool 交互。整個 keystore 是通過 PBE/SHA1/Twofish 加密,因此 keystore 能夠防止被誤改、察看以及校驗(yàn)。以前, Sun JDK( 提供者為 SUN) 允許你在不提供密碼的情況下直接加載一個 Keystore ,類似 cacerts , UBER 不允許這種情況。

          ?

          證書導(dǎo)入

          Der/Cer證書導(dǎo)入:

          要從某個文件中導(dǎo)入某個證書,使用keytool工具的-import命令:

          keytool -import -file mycert.der -keystore mykeystore.jks

          如果在 -keystore選項(xiàng)中指定了一個并不存在的密鑰倉庫,則該密鑰倉庫將被創(chuàng)建。

          如果不指定 -keystore選項(xiàng),則缺省密鑰倉庫將是宿主目錄中名為 .keystore的文件。如果該文件并不存在,則它將被創(chuàng)建。

          創(chuàng)建密鑰倉庫時會要求輸入訪問口令,以后需要使用此口令來訪問??墒褂?/span>-list命令來查看密鑰倉庫里的內(nèi)容:

          keytool -list -rfc -keystore mykeystore.jks


          P12格式證書導(dǎo)入:

          keytool無法直接導(dǎo)入PKCS12文件。

          第一種方法是使用IEpfx證書導(dǎo)入,再導(dǎo)出為cert格式文件。使用上面介紹的方法將其導(dǎo)入到密鑰倉庫中。這樣的話倉庫里面只包含了證書信息,沒有私鑰內(nèi)容。

          ?

          第二種方法是將pfx文件導(dǎo)入到IE瀏覽器中,再導(dǎo)出為pfx文件。
          ?????? 新生成的
          pfx不能被導(dǎo)入到keystore中,報錯:keytool錯誤: java.lang.Exception: 所輸入的不是一個 X.509 認(rèn)證。新生成的pfx文件可以被當(dāng)作keystore使用。但會報個錯誤as unknown attr1.3.6.1.4.1.311.17.1,查了下資料,IE導(dǎo)出的就會這樣,使用Netscape就不會有這個錯誤.

          三種方法是將pfx文件當(dāng)作一個keystore使用。但是通過微軟的證書管理控制臺生成的pfx文件不能直接使用。keytool不認(rèn)此格式,報keytool錯誤: java.io.IOException: failed to decrypt safe contents entry。需要通過OpenSSL轉(zhuǎn)換一下:

          1openssl pkcs12 -in mycerts.pfx -out mycerts.pem

          2openssl pkcs12 -export -in mycerts.pem -out mykeystore.p12

          通過keytool-list命令可檢查下密鑰倉庫中的內(nèi)容:

          keytool -rfc -list -keystore mykeystore.p12 -storetype pkcs12

          這里需要指明倉庫類型為pkcs12,因?yàn)槿笔〉念愋蜑?/span>jks。這樣此密鑰倉庫就即包含證書信息也包含私鑰信息。

          P7B格式證書導(dǎo)入:

          keytool無法直接導(dǎo)入p7b文件。

          需要將證書鏈RootServer.p7b(包含根證書)導(dǎo)出為rootca.cer和子rootcaserver.cer

          將這兩個證書導(dǎo)入到可信任的密鑰倉庫中。

          keytool -import -alias rootca -trustcacerts -file rootca.cer -keystore testkeytrust.jks

          遇到是否信任該證書提示時,輸入y

          keytool -import -alias rootcaserver -trustcacerts -file rootcaserver.cer -keystore testkeytrust.jks


          總結(jié):

          1)P12格式的證書是不能使用keytool工具導(dǎo)入到keystore中的

          2)The Sun's PKCS12 Keystore對從IE和其他的windows程序生成的pfx格式的證書支持不太好.

          3)P7B證書鏈不能直接導(dǎo)入到keystore,需要將里面的證書導(dǎo)出成cer格式,再分別導(dǎo)入到keystore。


          轉(zhuǎn)自http://blog.csdn.net/tearzhao/article/details/1761754
          posted on 2011-08-18 10:03 calvin 閱讀(769) 評論(0)  編輯  收藏 所屬分類: 安全
          主站蜘蛛池模板: 徐州市| 建始县| 海宁市| 高台县| 仁怀市| 大渡口区| 马关县| 昌邑市| 额济纳旗| 烟台市| 江孜县| 商河县| 广宁县| 永福县| 娱乐| 正定县| 浮山县| 溧水县| 麦盖提县| 基隆市| 涿州市| 安西县| 成武县| 文水县| 嵩明县| 大邑县| 仙居县| 乌兰浩特市| 苏州市| 固原市| 从化市| 诏安县| 横山县| 上杭县| 虞城县| 莎车县| 宝山区| 广南县| 榕江县| 怀柔区| 建湖县|