不一樣格式證書導入keystore方法

Java 自帶的  keytool   工具 是個密鑰和證書管理工具。它使用戶可以管理本身的公鑰 / 私鑰對及相關證書,用於(經過數字簽名)自我認證(用戶向別的用戶 / 服務認證本身)或數據完整性以及認證服務。它還容許用戶儲存他們的通訊對等者的公鑰(以證書形式)。   java

 keytool     將密鑰和證書儲存在一個所謂的  密鑰倉庫(   keystore     中。缺省的密鑰倉庫實現將密鑰倉庫實現爲一個文件。它用口令來保護私鑰。 windows

 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    )。   ide

 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    不容許這種狀況。   spa

 

證書導入

Der/Cer證書導入:命令行

要從某個文件中導入某個證書,使用keytool工具的-import命令:server

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

若是在 -keystore選項中指定了一個並不存在的密鑰倉庫,則該密鑰倉庫將被建立。

若是不指定 -keystore選項,則缺省密鑰倉庫將是宿主目錄中名爲 .keystore的文件。若是該文件並不存在,則它將被建立。

建立密鑰倉庫時會要求輸入訪問口令,之後須要使用此口令來訪問。可以使用-list命令來查看密鑰倉庫裏的內容:

keytool -list -rfc -keystore mykeystore.jks


P12格式證書導入:

keytool沒法直接導入PKCS12文件。

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

第二種方法是將pfx文件導入到IE瀏覽器中,再導出爲pfx文件。
       新生成的
pfx不能被導入到keystore中,報錯:keytool錯誤: java.lang.Exception: 所輸入的不是一個 X.509 認證。新生成的pfx文件能夠被看成keystore使用。但會報個錯誤as unknown attr1.3.6.1.4.1.311.17.1,查了下資料,IE導出的就會這樣,使用Netscape就不會有這個錯誤.

三種方法是將pfx文件看成一個keystore使用。可是經過微軟的證書管理控制檯生成的pfx文件不能直接使用。keytool不認此格式,報keytool錯誤: java.io.IOException: failed to decrypt safe contents entry。須要經過OpenSSL轉換一下:

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

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

經過keytool-list命令可檢查下密鑰倉庫中的內容:

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

這裏須要指明倉庫類型爲pkcs12,由於缺省的類型爲jks。這樣此密鑰倉庫就即包含證書信息也包含私鑰信息。

P7B格式證書導入:

keytool沒法直接導入p7b文件。

須要將證書鏈RootServer.p7b(包含根證書)導出爲rootca.cer和子rootcaserver.cer

將這兩個證書導入到可信任的密鑰倉庫中。

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

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

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


總結:

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

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

3)P7B證書鏈不能直接導入到keystore,須要將裏面的證書導出成cer格式,再分別導入到keystore

相關文章
相關標籤/搜索