2012-10-20 52 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解密提琴手安装自己的证书时)。