本周我要求在C#中实现基于HttpListner
的{{1}}服务器。
这个服务器在我的开发箱上适用于基于http和https的端点。
但它似乎在其他框上表现不一致,无法找到基于https
的端点。
为了启用基于SSL的端点,我已经做了以下事情。
我使用以下代码以编程方式安装它:
https
我使用netsh命令将证书注册到必要的端口,如下所示。这太务实了。
netsh http add sslcert ipport = 0.0.0.0:{0} certhash =" xxxx" appid = {application guid} certstorename = MY";
为确保我的应用程序在没有管理员权限的情况下继续运行,我将以下代码添加到以管理员权限运行的服务中。这太务实了。 这项服务是从我的Windows桌面应用程序中消耗的
netsh http add urlacl" https://+:{51001} \" user = everyone";
我还将证书名称添加到主机文件中,以便可以根据证书名称解析它。 即127.0.0.1 local.xyz.com
HTTPListener服务器代码添加了两个前缀。第一个是本地主机'在端口50001和另一个用于ssl' local.xyz.com'在51001港口。
此服务器公开的端点应该从同一台计算机上使用。 localhost或local.xyz.com前缀将解析为localhost。
和前缀添加如下:
var store = new X509Store(StoreName.My, StoreLocation.LocalMachine);
store.Open(OpenFlags.ReadWrite); //Requires Administrative privileges
var existingCert = store.Certificates.Find(X509FindType.FindBySubjectName, certName, false)
if (existingCert.Count > 0)
{
store.Close();
return true;
}
var certificate = new X509Certificate2(certFileName, "password");
store.Add(certificate);//Requires Administrative privileges
任何人都可以指出我在这里丢失或做错的任何事情,这样我的代码就会稳定,并且每台机器和每次运行都能正常工作。