簡體   English   中英

如何生成 Java PKCS12 存儲以連接到常規 SSL 網站?

[英]How to generate Java PKCS12 store to connect to regular SSL website?

我們在 https 上運行標准 web API 並定期購買 ZEA52C36203C5F99C3CE2442D523 證書。 我們的客戶只需通過 https 訪問它,該證書是通過默認系統 RootCA 信任的。

新客戶端正在使用 Java 通信服務器,該服務器需要 PKCS12 密鑰庫中的證書。 我們如何從我們的 key/csr/crt/pem 文件生成 PKS12 密鑰庫?

我做了一些研究,大多數例子都需要私鑰。 當然,我不想與客戶共享我們的私鑰。

是否可以在沒有私鑰的情況下創建 PKCS12 密鑰庫,類似於瀏覽器中的標准 RootCA?

謝謝,藍豹

是的。

盡管 PFX-now-PKCS12 主要設計用於將私鑰證書以及鏈證書作為一個塊存儲或傳輸,並且最常用於此目的,但它能夠存儲一個或多個“單獨”證書不匹配任何私鑰。 你是正確的,想要連接到你的客戶端應該在他們的信任庫中擁有你的服務器證書鏈的根證書,或者你的服務器證書本身,但絕對不是你的私鑰。

openssl實際上可以創建這樣一個PKCS12:

 openssl pkcs12 -export -in certfile.pem [-name $name] -nokeys -out blah.p12 
 # if you don't specify -name it defaults to 1 (the digit one) which can be mildly confusing
 # instead of being prompted for the password you can use -passout with several forms
 # described on the openssl man page, but consider the warning below

但是,如果他們使用標准(Sun/Oracle/OpenJDK)加密提供程序,則結果在 Java 中不起作用,該加密提供程序(在 8+ 中)支持 PKCS12 中的單獨證書作為 Java 中的“trustedCert”條目,僅當) certbag 有一個特殊的 Sun 定義屬性,Java 提供者在創建此類文件時會寫入該屬性,但 OpenSSL 沒有。

而是在 8 中使用 Java 的 keytool:

jre8/bin/keytool -importcert -keystore blah.p12 -storetype pkcs12 -file $certfile [-alias $name]

或者在 9+ 中,pkcs12 現在是默認值:

jre9+/bin/keytool -importcert -keystore blah.p12 -file $certfile [-alias $name]

如果您不指定別名,則默認為mykey 在這兩種情況下,您都可以添加-storepass $pw以避免被提示,但因此密碼將顯示在屏幕上,在 shell 或其他命令處理器的命令歷史記錄中,它有一個,並且在大多數情況下到同時在您的系統上運行的其他進程,(任何)這可能是一個安全問題或不是。 您還可以添加-noprompt以避免確認提示。

但是 user207421 是(大致)正確的,即使用這樣的信任庫可以破壞從他們的系統建立的其他SSL/TLS 連接,至少來自同一個 JVM,除非個別調用指定單獨的、單獨的信任庫,並且如果他們已經編碼他們會知道如何處理(並要求)更簡單的證書格式,例如 PEM。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM