我正在尝试创建一个使用 HTTPS 的小型 C# Web 服务器。我决定使用this WebServer library因为它似乎可以完成我正在寻找的一切。在 SSL/TLS 方面,我不是最了解的人,所以我想知道是否有人可以帮助我让 HTTPS 部分正常工作。基本上,我需要它来创建一个与 Web 服务器库一起使用的 SSL 证书( from this example ,它看起来像使用 X.509 证书),然后将该证书添加到计算机和/或当前的受信任证书中用户。
这是我到目前为止的代码(基本上只是从示例中复制并粘贴):
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:\Certs\certificate.dat”是否存在且受计算机信任,如果不存在,则应创建证书并信任它。
应用程序运行提升,因此权限问题不应该成为问题
编辑1: 看来我应该解释一下我到底想做什么。我正在尝试创建一个程序,该程序运行时将启动要在本地计算机上使用的 HTTPS Web 服务器。我并不是试图使用该 key 进行任何类型的实际验证,只是为了让计算机访问 HTTPS 本地页面,而不会收到大量“天哪,此页面没有良好的安全 key !!!”错误。它仅适用于测试和非敏感数据,因此实际的安全性并不那么重要,只要它有效即可。
在代码方面,我使用 this WebServer library处理实际的网络服务,代码来自from this example
最佳答案
您不需要在 C# 代码中创建证书,您可以在程序中自带证书(即由 makecert 制作)。要检查它是否已安装,请迭代相应的 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);
}
注释:
- 添加证书是特权操作,某些操作可能需要管理员权限 商店。
- 您可以查看 Fiddler 对证书的行为,看看是否需要类似的提示。 (启用 HTTPS 解密时,Fiddler 会安装自己的证书)。
关于c# - 使用 C# 以编程方式创建并信任 SSL 证书?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12992363/