2013-01-08 51 views
8

我迷失在證書和私鑰的曲折迷宮中。如何在不導入的情況下創建與SslStream AuthenticateAsServer一起使用的證書

我正在用C#編寫一個服務器。我希望它接受SSL連接。出於測試目的,我想爲「本地主機」生成證書,並將該證書用於服務器。理想情況下,我不想污染我的證書存儲,所以我只想要一個文件或多個文件,C#代碼可以加載以提供證書。

我試過的一切(使用網絡搜索建議的食譜方法)要麼給我「提供給包的憑據未被識別」或「服務器模式SSL必須使用帶有關聯私鑰的證書」。

有沒有辦法生成證書和私鑰,然後將它們加載到X509Certificate對象中,而不將它們加載到我的機器證書存儲中?

+0

你確實需要這個證書嗎?還是隻想跳過證書?使用它檢查? – VladL

+0

服務器是一個Web服務器。我需要使用https協議從瀏覽器連接到它。所以我想我需要證書。我知道證書不會被信任,所以瀏覽器用戶將不得不接受它。 –

回答

12

最後,我跑下面創建server.pfx文件:

makecert.exe -r -pe -n "CN=localhost" -sky exchange -sv server.pvk server.cer 
pvk2pfx -pvk server.pvk -spc server.cer -pfx server.pfx 

然後我被裝載在它的代碼:

certificate = new X509Certificate2("server.pfx", "password"); 

(我實際上並沒有硬編碼這樣的密碼:-)

訣竅是知道我需要一個pfx文件,並且我需要使用X509Certificate2類而不是X509Certifica加載它TE。

+0

拯救了我的生命。我使用這種方法通過代理服務器應用程序向客戶端瀏覽器提供證書。我知道它不是一個正確的方法,但仍然是一切都好。 –

+0

但是這種方法對於代理服務器並不適用。你有什麼想法如何解決它? –

+0

不起作用。我得到一個'CryptographicException'說「指定的網絡密碼不正確」,這顯然是錯誤的,因爲我使用了密碼「x」,這很難輸入錯誤。任何想法修復? – Timwi

1

有許多工具應該讓您充當您自己的CA並生成證書。 XCA就是其中之一。例如,還有許多使用OpenSSL命令的方法。

僅生成自簽名證書可能看起來像最簡單的選項,但使用測試CA(和單獨的服務器證書)可能是值得的。如果需要使測試更加真實,這將允許您將測試CA導入瀏覽器的商店。使用正確的工具(例如XCA)並不困難多少。

生成服務器證書及其私鑰後,將其轉換爲PKCS#12文件(.p12/.pfx)。您可以使用X509Certificate2.import(...)加載它。 (參見例如在this answer

+0

對於那些想要使用此解決方案的人。我認爲我的答案可以補充@布魯諾說,[這裏](http://stackoverflow.com/questions/9982865/sslstream-example-how-do-i-get-certificates-that-work/38155120#38155120)我向您展示使用OpenSSL生成有效證書的方式。 – Joseph

3

Niki Loche方法的工作原理。

如果你得到The specified network password is not correct.,那麼你應該在C#中沒有密碼的情況下嘗試它。不要緊,你的輸入密碼是makecert

certificate = new X509Certificate2("Server.pfx", ""); 

但是,如果你想使用的密碼(是有原因的,它的存在:)),嘗試改變pvk2pfx.exe命令:

pvk2pfx.exe」 -pi密碼-pvk服務器.pvk -spc Server.cer -pfx Server.pfx

,並在C#中輸入:

證書=新X509Certificate2(「服務器。PFX」,‘密碼’);

密碼必須是相同的,因爲它是在創造CER文件

這奏效了我,我希望這會幫助別人

+0

謝謝!很高興我讀了其他答案:) –

0

我從機器上存儲(而不是用戶存儲)導入機器證書時有同樣的問題我解決它通過運行Visual Studio作爲管理員因爲需要管理員權限才能訪問機器商店證書的私鑰。

相關問題