需要检查C#中基于HTTPListener类的服务器从头到尾的SSL支持

时间:2015-05-20 18:39:56

标签: c# ssl

本周我要求在C#中实现基于HttpListner的{​​{1}}服务器。 这个服务器在我的开发箱上适用于基于http和https的端点。 但它似乎在其他框上表现不一致,无法找到基于https的端点。 为了启用基于SSL的端点,我已经做了以下事情。

  1. 我从证书颁发机构购买了一个新证书,作为名为local.xyz.com的pfx文件。
  2. 我使用以下代码以编程方式安装它:

    https
  3. 我使用netsh命令将证书注册到必要的端口,如下所示。这太务实了。

    netsh http add sslcert ipport = 0.0.0.0:{0} certhash =" xxxx" appid = {application guid} certstorename = MY";

  4. 为确保我的应用程序在没有管理员权限的情况下继续运行,我将以下代码添加到以管理员权限运行的服务中。这太务实了。 这项服务是从我的Windows桌面应用程序中消耗的

    netsh http add urlacl" https://+:{51001} \" user = everyone";

  5. 我还将证书名称添加到主机文件中,以便可以根据证书名称解析它。 即127.0.0.1 local.xyz.com

  6. 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
    

    任何人都可以指出我在这里丢失或做错的任何事情,这样我的代码就会稳定,并且每台机器和每次运行都能正常工作。

0 个答案:

没有答案