2017-10-09 37 views
0

我想訪問服務器的REST端點,例如xyz.com。他們提供了PEM格式的證書,我應該在連接到他們的終端時將其包含在我的應用程序中。將證書導入到Spring中的問題

我的應用程序是在Spring Framework上編寫的,我需要將PEM轉換爲P12格式,因爲Spring將不接受PEM。這是我怎麼轉換:的

openssl pkcs12 -export -out certificate.p12 -inkey private.pem -in server_cert.pem 

其中,

certificate.p12 =結果P12文件

private.pem =私鑰

server_cert.pem =證書文件服務器

我得到的錯誤是:

沒有證書與私鑰匹配。

現在我的問題:

  1. 誰的私有密鑰應該被用來產生從PEM文件P12文件?
  2. 如果客戶端的私鑰用於生成p12,它怎麼可能與證書匹配(錯誤信息變得明顯)?
  3. 爲什麼我需要我的私鑰與服務器通信?根據我的理解,在SSL會話期間,客戶端的私鑰不會出現在圖片中。或者我的理解錯了?
  4. 如果使用服務器的私鑰生成p12,他們爲什麼要共享它?

我是新手,因此歡迎任何鏈接/建議閱讀/資源/答案。

+0

你從哪裏得到你的'server_cert.pem'?當您獲得用於連接服務器的私鑰時,您還應該獲得簽名證書。從這個文件的名字看來,你使用的是server_cert.pem,我假設它只包含服務器的證書,而不是你的證書。您應該使用已簽名供您使用的證書進行操作。 –

+0

服務器開發人員將其提供給將要呼叫其端點的所有客戶端。 –

+0

一般來說,大部分時間'p12'都會發給客戶。你有沒有試過問他們一個p12?當你雙擊pem時,系統證書查看器打開。葉證書說什麼?查找SubjectDN,IssuerDN,SubjectAltName等屬性。這應該給你一個想法,如果你有正確的證書。 –

回答

1

如果您怎麼看待client-authentication的作品,在「談判階段」,從最後一個點的第二個說:

客戶端發送一個CertificateVerify消息,這是比上簽名使用客戶端證書的私鑰握手消息。可以使用客戶端證書的公鑰來驗證此簽名。這讓服務器知道客戶端可以訪問證書的私鑰並擁有證書。

因此,要回答你的問題:

  1. 您應該使用這是給你的私鑰。
  2. A PKCS12是一種Java KeyStore,它類似於標準的JKS。它可以包含密鑰對的列表。但是PKCS12的因特網標準是隻有密鑰對條目,即1個私鑰和其相關的證書鏈。由於私鑰和證書鏈是作爲單獨的實體提供給您的,因此您應該自己構建PKCS12,您將在代碼中使用它來向提供服務的服務器驗證客戶端的身份。
  3. 如果您查看握手協議級別的握手步驟,您應該看到客戶端的私鑰(您的私鑰)用於簽署一些數據併發送到服務器,服務器將在其中進行驗證基於您的公鑰的消息的真實性。一旦服務器驗證了消息,它就會得出你擁有私鑰的結論。
  4. 您將不會被授予服務器私鑰。你會得到你的(用戶)私鑰,這是你守護它的,不應該給任何人的。

在使用私鑰和證書鏈進行p12構建時,可能會有某些缺失或微不足道的錯誤,這會導致失敗。如果不能解決問題,你也可以通過編程方式使用KeyStore API構建p12。