2014-04-25 69 views
1

我一直在嘗試創建一個SSL服務器,該服務器從.crt加載證書。我已經嘗試了兩個X509Certificate.CreateFromCertFile(@".\Secure\Certificate\" + CertName + ".crt");和cert.import,並且都不起作用。在兩者上,我遇到一個問題:「服務器模式SSL必須使用帶有關聯私鑰的證書」。關鍵在於!我的目錄:驗證證書TLS/SSL服務器

Secure/ 
    Certificate/ 
     ZeusHTTP.crt 
     ZeusHTTP.csr 
     ZeusHTTP.key 
    Plugins/ 
     ... 

證書是使用OpenSSL創建的。

+0

如果指定絕對路徑,該怎麼辦?附註:我已經從你的文章中刪除了「搜索很多」/「謝謝你」的文字 - 儘量不要將它添加到你的文章中,因爲他們很少提供任何額外的細節。 –

+0

@AlexeiLevenkov我確實嘗試過。我確實得到了一個可行的答案。另外,我把我搜索了很多,因爲我不喜歡沒有搜索就問的人,它可能看起來像那樣。 – Zeusoflightning125

+0

您的問題已經顯示出一些研究結果,幷包含足夠的詳細信息來診斷問題。 「你有沒有搜索過任何東西」評論通常在問題沒有顯示任何努力/細節時提出 - 增加「搜索了很多」不會突然提出問題而沒有細節問題,也不會顯示努力尋找答案。 –

回答

1

簡單閱讀the docs告訴我們您應該使用通常帶有文件後綴p7b的pkcs7文件。您需要將您的OpenSSL證書轉換爲此格式,或者找到可從頭開始生成的實用程序。

+1

私鑰證書不能包含在p7b文件中。你的回答不會解決OP的問題。 –

+1

文檔也不正確(有時會發生這種情況,是的) - 「可以使用任何PKCS7簽名的文件,包括Authenticode簽名的.pfx文件。」 - Authenticode使用PKCS#7進行簽名,但.pfx不是「Authenticode」,而是PKCS#12。 –

0

服務器模式SSL必須使用證書與關聯的私鑰」,關鍵是有...

至於其他已經表示,他們必須在同一個文件。這裏有步驟去做

首先

複製ZeusHTTP.crtZeusHTTP-chain.crt

cp ZeusHTTP.crt ZeusHTTP-chain.crt 

打開ZeusHTTP-chain.crt,並確保它具有所有驗證服務器證書所需的中間體證書。因此,您將擁有2個或更多證書:

-----BEGIN CERTIFICATE----- 
<server certificate> 
-----END CERTIFICATE----- 
-----BEGIN CERTIFICATE----- 
<intermediate certificate> 
-----END CERTIFICATE----- 
-----BEGIN CERTIFICATE----- 
<intermediate certificate> 
-----END CERTIFICATE----- 

根據需要添加證書。例如,如果您獲得了免費的Startcom證書,則需要從StartSSL's Index of Certs中添加sub.class1.server.ca.pem中間值。

發送所有證書需要解決PKI中的「哪個目錄」問題。它是PKI中一個衆所周知的問題,實際上這意味着客戶端不知道去哪裏獲取缺失的中間證書。

執行以下操作來生成一個PKCS 12文件:

openssl pkcs12 -export -in ZeusHTTP-chain.crt -inkey ZeusHTTP.key -out ZeusHTTP.p12 

最後,在IIS上安裝該證書作爲測試。

對於您的代碼,我相信您需要將其加載到Certificate2而不是Certificate


另請參見MSDN上How to read a .p12 file in my web service在堆棧溢出或how to create x509 certificate and use it in sslstream

相關問題