2012-10-20 54 views
2

我正在嘗試創建一個適用於HTTPS的小型C#Web服務器。我決定使用this WebServer library,因爲它似乎在做我想要的一切。當談到SSL/TLS時,我不是最有知識的人,所以我想知道是否有人能幫我讓HTTPS的一部分工作。基本上,我需要它創建一個SSL證書,該證書將與Web服務器庫(from this example,它看起來像使用X.509證書)一起工作,然後將該證書添加到計算機和/或當前用戶的可信證書。以編程方式創建並信任C#的SSL證書?

下面的代碼我迄今(基本上只是複製&從例如粘貼):

var certificate = new X509Certificate2("C:\\Certs\\certificate.dat", "password"); 

// We do the cast since we want to specify UseClientCert 
var listener = HttpListener.Create(System.Net.IPAddress.Any, 8080, certificate); 
listener.RequestReceived+=listener_RequestReceived; 
listener.Start(5); 

代碼在什麼地方,我需要檢查,如果「C:\證證書\ certificate.dat」的存在&被計算機信任,如果沒有,它應該創建證書並信任它。

應用程序運行升高,所以權限問題不應該是一個問題

編輯1: 它看起來像我應該解釋究竟是什麼,我試圖做的。我試圖創建一個程序,該程序在運行時將啓動要在本地計算機上使用的HTTPS Web服務器。我並沒有試圖用密鑰來做任何真正的驗證,只是爲了讓計算機訪問HTTPS本地頁面而沒有得到大量的「OMG這個頁面沒有一個好的安全密鑰!!!」錯誤。它只能用於非敏感數據的測試&,所以實際安全性並不重要,只要它可以工作。

在代碼方面,我使用this WebServer library來處理實際的Web服務,而且代碼是從from this example

+1

代碼和問題一樣神祕。 Afaict,你得到了整個證書過程。證書由權威機構簽發,而不是您。該機構擁有服務器,可以讓有人驗證您的證書是否合法,並且您確實是您自稱的人。你不能成爲你自己的權威,這相當於我十幾歲的兒子說「相信我爸爸!」。或者你說你的姓氏真的是「Thepc」。 http://en.wikipedia.org/wiki/Certificate_authority –

+1

@HansPassant OP可能只想創建一個支持https的web服務器,而不是要證明他真的是他所說的。 –

+0

@HansPassant - 你是對的,我的姓氏不是Thepc; D的想法是,這將用於在可以測試網站的計算機上設置一種「快速測試」場景(https和所有)點擊一個按鈕。我*不*使用這種任何形式的永久性證書系統。對不起,如果代碼太模糊;我會稍微編輯一下這篇文章來澄清。 – MatthewSot

回答

3

你並不需要創建在C#代碼證,你可以帶上自己用該程序(即由makecert製作)。要檢查它是否已經安裝了itearate對應的X509Store以查看它是否已經安裝,如果沒有 - 添加一個。樣本可以在StoreName enumeration主題找到。

這裏是隨機的線,你將需要操作店/證書從樣品上MSDN:

X509Store store = new X509Store(StoreName.My); 
store.Open(OpenFlags.ReadWrite); 
X509Certificate2 certificate1 = new X509Certificate2("c:\\mycerts\\*****.cer"); 
store.Add(certificate1); 
foreach (X509Certificate2 x509 in storecollection) 
{ 
    Console.WriteLine("certificate name: {0}", x509.Subject); 
} 

注:

  • 添加證書是特權的操作,可能需要一些管理員privilegies 商店。
  • 您可以查看提琴手對證書的行爲並查看是否要提供類似的提示。 (啓用HTTPS解密提琴手安裝自己的證書時)。