簡體   English   中英

如何從簽名證書創建信任庫和密鑰庫?

[英]How do I create truststore and keystore from the signed certificate?

我有一個 Java 服務,需要在其上啟用 TLS。 我已經生成了一個csr請求,現在它已經與公司的 CA 簽署了。 所以,我現在有server.csrservice.crt文件。 如何從中創建信任庫和密鑰庫? 謝謝。

Java TLS (JSSE) 服務器需要私鑰和證書,或者如果您更喜歡證書和私鑰,則需要由KeyManager對象提供來標識自身。 如果它使用選項來請求或要求客戶端身份驗證,它只需要TrustManager證書來驗證客戶端,也稱為客戶端證書或雙向或相互身份驗證,這種情況很少見; 它從不需要在TrustManager擁有自己的證書。 但是,根據使用的證書,客戶端(可能不是 Java)可能需要服務器證書的 CA 證書,或者在極少數情況下服務器證書本身添加到他們的信任庫中。 盡管存在其他選項/方法,但KeyManager對象和TrustManager對象(如果使用)通常是通過讀取密鑰庫和(可能)信任庫文件來創建的。

有兩種主要方法可以為服務器創建這樣的密鑰庫文件,其變化部分取決於您是否使用 CA,如果使用,使用哪種以及如何使用。 兩者的工作原理都是通過生成密鑰對(私有公共)然后獲取公共部分的證書; 這可以是虛擬/自簽名證書或來自 CA,在后一種情況下,幾乎總是通過創建 CSR(證書簽名請求),將此 CSR 提交給 CA,並獲得至少返回請求的最終實體或“葉”證書。 現在幾乎在所有情況下,CA 頒發的正確驗證證書至少需要一個(有時更多)“中間”或“鏈”證書,這些證書也需要在服務器密鑰庫中配置; CA 可以使用多種格式和方法來提供此(這些)鏈證書,並且沒有單一標准。

方法 A 是使用 Java keytool -genkeypair創建已經密鑰庫的密鑰對,然后使用keytool -certreq為其創建 CSR,並且當獲得帶有鏈的證書(如果適用)時,將此“回復”導入到同一個密鑰庫中,將它與已經存在的私鑰結合起來。 根據葉和鏈證書使用的格式,存在變化; 基本上,您要么從上到下分別導入證書,以葉子結尾,要么一次導入整個鏈。 如果這是您創建您使用的 CSR 的方式,您應該查看您的“crt”文件以查看它是什么格式以及其中包含哪些數據——如果它是 PEM 格式(其中 jhas 可打印字符塊主要是字母和帶有標題和結尾行的數字-----BEGIN/END {something}----- ) 查看是否有一個或多個塊以及 {something}(s) 是什么(是),以及在 BEGIN/END 行形成的塊之外是否有任何相關的“評論”信息。

方法 B 是使用其他東西,最常見的是 OpenSSL,但也有其他工具來生成密鑰對(私鑰)和 CSR,然后以相同的方式使用它來獲取證書。 然后,您可以使用 OpenSSL 將私鑰和證書組合到一個 PKCS12 文件中,該文件一個 Java 密鑰庫,假設您的文件都是 PEM 格式; OpenSSL 生成的私鑰始終是,並且證書通常可以或可以輕松轉換。 如果您正在處理舊版本的 Java 或無法輕松處理 PKCS12 的 Java 程序,則可以使用keytool -importkeystore將 PKCS12 轉換為 JKS,這是 Java 最初和“傳統”使用的格式。

作為任一變體,您可以使用https://keystore-explorer.org (基於 GUI 的 Java 程序)直接在密鑰庫(如keytool )中/從密鑰庫創建密鑰對和 CSR,然后導入 CA 頒發的和鏈證書,或者將 OpenSSL 生成的私鑰和 CA 頒發的鏈證書一起導入密鑰庫。

正如評論的那樣,所有這些方法(我很確定所有變體)都已包含在現有 Qs 中,但是自簽名(在進行開發時通常更簡單,這是 StackOverflow 的主題)往往更多數量眾多,因此需要花點功夫才能找到有關 CA 頒發的 As(或 Q),以及您想要的特定方法和可能的變體。 試圖涵蓋所有可能的情況,而不知道您實際需要哪些情況,可能需要數周或數月的時間。

暫無
暫無

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

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