2009-05-01 43 views
12

我試圖在C#應用程序中使用HttpListener類來讓迷你web服務器通過SSL提供內容。爲了做到這一點,我需要使用httpcfg工具。我有一個.pfx文件與我的公鑰和私鑰對。如果我使用mmc手動導入此密鑰對到本地機器商店,一切正常。但是,如果我使用X509Store類以編程方式導入此密鑰對,則無法連接到我的迷你網絡服務器。請注意,在這兩種方法中,證書都被導入到LocalMachine中的MY商店中。奇怪的是,一旦我以編程方式導入證書,我可以在mmc中查看證書,當我查看證書時,UI指示私鑰也可用於此證書。以編程方式用私鑰導入證書

挖掘更深一點,我注意到當我手動導入密鑰對時,我可以看到一個新文件出現在C:\Documents and Settings\All Users\Application Data\Microsoft\Crypto\RSA\MachineKeys中,但是當我以編程方式導入時沒有出現。在相關說明中,當我刪除手動導入的證書時,它不會從前面提到的目錄中刪除相應的私鑰文件。

最終,我的問題是這樣的:當我以編程方式將證書添加到存儲中時,存儲私鑰的位置以及爲什麼HttpListener類(HttpApi)不可訪問?

注意,這個問題稍微相關,但我不認爲是許可控制,因爲這是所有正在做一樣的Windows用戶的問題: How to set read permission on the private key file of X.509 certificate from .NET

回答

28

好的,我想通了。它必須處理證書對象的密鑰存儲參數。對於遇到此問題的其他人,請確保使用X509KeyStorageFlags.PersistKeySetX509KeyStorageFlags.MachineKeySet標誌構建要添加到商店中的對象X509Certificate2。這將強制私鑰繼續存在於HttpApiHttpListener包裝此)所要求的機器密鑰集位置中。

+0

請將此標記爲答案 – Developer 2009-05-01 17:47:40

0

這是一個2路SSL?如果是,那麼您是否發送了在您的計算機上生成的SSL證書請求文件?此證書請求文件將用於創建SSL,並且它們一起形成公用密鑰對。

您是否還嘗試爲用於運行Web應用程序的用戶帳戶分配證書權限?您可以通過使用Microsoft WSE 3.0工具來完成此操作。

+0

我現在只是使用自己生成的密鑰對進行測試,所以涉及到這個證書請求。我還沒有玩過任何相關的權限,因爲所有這些都是以相同的用戶身份完成的(導入和運行網絡服務器證書)。沒有IIS或其他任何涉及。 – Jason 2009-05-01 17:13:22

+0

本應讀取「沒有涉及證書請求」。 – Jason 2009-05-01 17:14:18

0

不完全回答你的問題,但在這裏爲別人走這條路的參考:

Here是一個MS聊天的鏈接,讓C#示例代碼做什麼httpcfg做,因此無需爲部署工具。

相關問題