c# - 使用 C# 以编程方式创建并信任 SSL 证书?

标签 c# ssl https webserver

我正在尝试创建一个使用 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/

相关文章:

node.js - 在 Node 中编写 https 应用程序并在 Azure 应用服务上使用它

mod-rewrite - Apache HTTPS 到 HTTPS 重定向

http - Delphi Indy HTTPS 检测来自 Web 服务器的最新文件

c# - 是否启用夏令时?

java.net.SocketException : Connection reset 异常

ssl - 位于 https ://apitest. authorize.net/soap/v1/Service.asmx 的 Soap 沙盒仅限 TLS 1.2?

javascript - 带有 https url 的 jquery 和 post 方法安全性

c# - 路易斯在两个意图之间做出选择

C#:为什么我的后台工作线程信号已完成,但未完成?

c# - Cookie 身份验证 ASP.NET Core