Java自帶的keytool工具是個密鑰和證書管理工具。它使用戶可以管理本身的公鑰/私鑰對及相關證書,用於(經過數字簽名)自我認證(用戶向別的用戶/服務認證本身)或數據完整性以及認證服務。它還容許用戶儲存他們的通訊對等者的公鑰(以證書形式)。 keytool 將密鑰和證書儲存在一個所謂的密鑰倉庫(keystore)中。缺省的密鑰倉庫實現將密鑰倉庫實現爲一個文件。它用口令來保護私鑰。java
Der/Cer證書導入: 要從某個文件中導入某個證書,使用keytool工具的-import命令:windows
keytool -import -file mycert.der -keystore mykeystore.jks
若是在 -keystore 選項中指定了一個並不存在的密鑰倉庫,則該密鑰倉庫將被建立。 若是不指定 -keystore 選項,則缺省密鑰倉庫將是宿主目錄中名爲 .keystore 的文件。若是該文件並不存在,則它將被建立。 建立密鑰倉庫時會要求輸入訪問口令,之後須要使用此口令來訪問。可以使用-list命令來查看密鑰倉庫裏的內容:瀏覽器
keytool -list -rfc -keystore mykeystore.jks
P12格式證書導入: keytool沒法直接導入PKCS12文件。 第一種方法是使用IE將pfx證書導入,再導出爲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轉換一下:安全
openssl pkcs12 -in mycerts.pfx -out mycerts.pem openssl pkcs12 -export -in mycerts.pem -out mykeystore.p12
經過keytool的-list命令可檢查下密鑰倉庫中的內容:ide
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