簡體   English   中英

SSL證書X.509導出

[英]SSL Certificate X.509 Export

我正在嘗試使用Web服務,但是我對證書有很多疑問,我是這個主題的新手,開發Web服務的團隊向我發送了一份文檔,其中解釋了如何使用它但啟用了連接,我需要使用證書(X.509),我從他們的網站生成了p7b證書,並在本地環境中導入了該證書,使用Keytool -import會生成JKS文件,但他們警告我應該安裝“ Entrust”(它們提供給我的根證書和中級證書)我將keytool -import與這些.cer文件一起使用,並且該命令為每個文件生成了一個.JKS,我也安裝了這些cer,我的問題是:

  • 要使用該Web服務,我需要在Java,jks或p7b的實現邏輯中附加哪個證書文件?

  • 如何在所有測試環境中使用此證書? (我不知道此證書是否只能在生成CSR的PC中使用)。

我正在嘗試使用SOAPUI應用程序模擬呼叫,但收到身份驗證錯誤,因此證書可能已破損。

他使用Windows證書存儲區和.NET來實現所有這些內容,但它們無法為我提供對keytool的支持。

要在SSL / TLS中進行客戶端身份驗證 (也稱為相互身份驗證),您(您的程序)不僅需要證書,還需要證書PLUS PRIVATE KEY和通常的中間/鏈證書。 規范地有5個步驟:

  1. 在您的計算機上,生成一個密鑰PAIR,該密鑰對由一個私鑰和一個公鑰組成,以及一個包含公鑰的證書簽名請求(CSR)。 這些步驟可以單獨完成,也可以結合使用,而您不會注意到同時存在CSR和私鑰。

  2. 將CSR連同適當的身份證明和授權證明一起提交給證書頒發機構(CA),並在CA要求時付款。

  3. CA頒發包含您的公鑰和身份以及其他一些信息的“最終實體”證書(在這種情況下為客戶端證書),並通常與中間證書或有時形成的一些中間證書一起提供給您該證書(s)從實體證書到受信任的CA根或錨證書的“鏈”。 “ p7b”文件是傳輸一組相關證書(例如您的實體證書和您的鏈式證書)的一種相當普遍的方式,盡管不是唯一的方式。

  4. 您將實體證書和鏈證書返回到計算機,並與步驟1中的私鑰合並。

  5. 您可以將私鑰PLUS證書鏈與各種程序(例如瀏覽器, curl類的實用程序或自定義應用程序)結合使用。

步驟1和4(和5)的詳細信息取決於您所使用的系統和軟件,盡管聽起來好像您將要進入Windows證書存儲區,但是您並不能以任何可識別的方式指定它們。 如果是這種情況,並且特別是當前用戶存儲的“個人”部分(而不是像SYSTEM這樣的機器帳戶),那么當您運行MMC(又名“管理工具”)並選擇Cert Mgr加載項時,或直接運行certmgr.msc ,證書的圖標左側應有一個黃色鍵:

帶有私鑰的certmgr

與您的問題相反,Java JCE(至少在Windows上為Oracle-was-Sun Java) 可以解決此問題; 運行keytool -list -storetype Windows-MY -keystore NONE並親自查看。

但是,某些(可能很多)Java 程序不能。 對於這些,您需要一個包含私鑰PLUS證書的密鑰庫文件; 創建運行導出向導並選擇“是,導出私鑰”,然后使用“包含...路徑”格式化PKCS 12(又名PFX)。

默認情況下,Java 8的最新更新默認情況下可以自動處理PKCS12密鑰庫(在JRE/lib/security/java.security查找keystore.type.compat=true ),而較舊的版本可以在程序配置了商店類型的情況下這樣做(不知道SoapUI是否這樣做)。 對於需要JKS的舊版本,將其導出到PKCS12之后再說mykey.p12轉換為

 keytool -importkeystore -srcstoretype pkcs12 -srckeystore mykey.p12 -destkeystore mykey.jks

您嘗試存檔的是一種相互身份驗證。 為了了解基礎知識,您需要了解人類只是簡單地設計了一個密碼,以使用相同(對稱)密碼鎖定和解鎖信息。 每個知道一個密碼的人都可以

  1. 閱讀消息
  2. 重寫消息以發送錯誤信息

這很危險。 因此,他們發明了兩種不同的密碼,一種用於寫入(專用)密碼,另一種用於接收(公用)密碼,而我們將它們稱為不對稱密碼。 非對稱加密的問題在於,您只能選擇一個密碼,相反的密碼是計算出來的,不能自由選擇。

最后,他們發明了證書以簡化流程。 證書包含打包到文件中的強密碼。 如果不查看證書,就不知道密碼是私有的還是公開的,這意味着p7b(pkcsv7b)和jks可以包含絕對相同的信息。 區別僅在於格式,例如.doc.docx之間的區別。

第二個問題

在大日本戰爭中,間諜活動是一件大事,特工們在戰術點上收集了有關對立面的信息,並將這些信息發送給他們的真實領主,以發現戰術/策略上的弱點。 每當發現一個口號時,他就會變成雙重間諜的偽造蜜罐,以使軍閥做出錯誤的決定並陷入陷阱。

因此,作為軍閥,您必須信任您的經紀人...但是,如何確定? 好吧,您可以向其他代理詢問有關您從中獲得信息的代理的信息,以保證消息可以被信任。 因此,第一個代理商也必須要求其他代理商對消息進行簽名,代理商之間的這個問題就是CSR! 如果其他代理也簽署了協議,我們將擁有“信任鏈”。 好的,我們現在有四個參與方,即代理商,敵人(黑客)和您的簽約代理商。

必須放置在什么地方? 好吧,假設您是軍閥(服務器),

  1. 您需要信任庫中所有客戶(代理)的公共密碼才能向他們發送消息(下載),
  2. 您需要知道您的私人密碼才能對代理發送的消息(帖子,請求,上傳)進行編碼。

假設您是敵軍線(萬維網的開放字段)內的軍閥代理(客戶端/瀏覽器),則必須存儲:

  1. 您的私鑰,以發送消息並簽署其他代理的消息
  2. 軍閥的公共密鑰,用於編碼主人的命令。

您現在已經了解到,證書可以包含私鑰以及公鑰。 如何在技術上使用它們?

幸運的是,keytools是開源的,可以從grepcode下載源代碼( 單擊此處 ),然后將您的實現復制粘貼。

相互認證的一些提示:

  1. 服務器不應提供其公共證書,因為所有經過身份驗證的客戶端在其信任庫中都已經具有公共證書(密鑰)。

  2. 客戶的證書應以非電子方式發送(打印為射頻代碼或其他方式)。

  3. 客戶端應以兩個單獨的物理字母顯示服務器的公鑰和客戶端私鑰(您可能會注意到,如果您使用電子現金卡(ec卡),則會有兩個字母,一個用於PIN,一個用於ec)。 -卡)。

暫無
暫無

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

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