不同格式證書匯入keystore方法
Java 自帶的 keytool 工具 是個金鑰和證照管理工具。它使使用者能夠管理自己的公鑰 / 私鑰對及相關證照,用於(通過數字簽名)自我認證(使用者向別的使用者 / 服務認證自己)或資料完整性以及認證服務。它還允許使用者儲存他們的通訊對等者的公鑰(以證照形式)。
keytool 將金鑰和證照儲存在一個所謂的 金鑰倉庫( keystore ) 中。預設的金鑰倉庫實現將金鑰倉庫實現為一個檔案。它用口令來保護私鑰。
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 不允許這種情況。
證照匯入
Der/Cer證照匯入:
要從某個檔案中匯入某個證照,使用keytool工具的-import命令:
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轉換一下:
1)openssl pkcs12 -in mycerts.pfx -out mycerts.pem
2)openssl 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。
http://blog.csdn.net/peterwanghao/article/details/1761728
相關文章
- SSL證書格式及轉化方法
- 以太坊錢包開發系列2 - 賬號Keystore檔案匯入匯出
- Charles 匯出證書、簽發證書
- 蘋果簽名證書:共享證書和獨享證書找不同蘋果
- keytool檢視和匯入證書,使用 jre 發行包中的 cacerts 操作方法
- 【應用服務 App Service】App Service證書匯入,使用Key Vault中的證書APP
- Poi 匯入格式轉換
- Qt Creator匯入不同Qt版本QT
- Confluence6匯入SSL證書和問題解決
- .NET 6學習筆記(6)——SSL證書的匯出和格式轉換筆記
- 如何配置內網IP SSL證書?附客戶端匯入IP根證書兩種方案內網客戶端
- cer格式證書怎麼轉換為pfx格式
- win10 如何匯出證書_win10網站的證書怎麼匯出Win10網站
- YApi 匯入 Swagger YAML 格式資料APISwaggerYAML
- 不同型別SSL證書如何申請型別
- 如何匯入某網站的certificate證書到SAP ABAP系統網站
- SSL證書轉PEM格式 – HTTPS SSL 教程HTTP
- SSL證書格式轉換 – HTTPS SSL 教程HTTP
- Chrome瀏覽器如何匯出所有書籤並匯入書籤Chrome瀏覽器
- php匯入時設定不同的編碼PHP
- Java中的匯入匯出(自身驗證版)Java
- [SSL證書].pfx格式和.Cer格式的區別以及格式互相轉換
- MySQL 匯出資料為csv格式的方法MySql
- .pfx格式證書轉.key和.crt檔案
- EV程式碼簽名證書和標準程式碼簽名證書有何不同?
- 用OpenSSL把二進位制的Cer證書轉換程Base64格式的PEM格式的證書
- Windows2000/2003/2008伺服器IIS匯入伺服器證書的方法(IIS5、IIS6、IIS7)Windows伺服器
- 如何透過Python將JSON格式檔案匯入redis?PythonJSONRedis
- 六、IDEA匯入阿里程式碼格式化模板Idea阿里
- gitbook 入門教程之匯出電子書Git
- 匯入自定義板塊的方法
- python之匯入模組的方法Python
- 怎麼匯入Lightroom預設和安裝方法,lr預設匯入批次匯入教程OOM
- php匯出csv格式PHP
- ssl證書到期時間查詢方法
- 伺服器證書的備份方法伺服器
- Tomcat下SSL證書的安裝方法Tomcat
- 密碼學系列之:PKI的證書格式表示X.509密碼學
- Python匯入Excel表格資料並以字典dict格式儲存PythonExcel