为自托管WCF服务启用SSL绑定

时间:2013-01-15 22:38:31

标签: .net wcf iis ssl-certificate

我运行自托管的WCF服务,我希望使用自签名SSL证书进行保护。为此,我需要将此SSL证书与某个端口绑定。有几种方法可以做到:

  1. 根据这个http://msdn.microsoft.com/en-us/library/ms733791.aspx我可以使用netsh并且它可以工作,但我不希望依赖netsh并从.NET代码中做所有事情。

    < / LI>
  2. 所以我找到了以下代码段:

        using (ServerManager manager = new ServerManager())
        {
            Site site = manager.Sites.FirstOrDefault(i => i.Applications.Cast<Application>().Any());
            Application app = site.Applications.Cast<Application>().First();
            site.Bindings.Add(":*:PORTN", cert.GetCertHash(), store.Name);
            manager.CommitChanges();
        }
    
  3. 它可以工作,但这需要安装IIS。否则我得到以下异常:

      

    使用CLSID检索组件的COM类工厂   {2B72133B-3F5B-4602-8952-803546CE3344}由于以下原因而失败   错误:80040154未注册类(HRESULT异常:   0x80040154(REGDB_E_CLASSNOTREG))..

    所以,问题是 - 有没有办法在托管代码中实现这一点,但无需安装IIS?

2 个答案:

答案 0 :(得分:1)

找到我问题的正确答案:Binding an SSL certificate to a port programmatically

我不需要使用像ServerManager这样的托管类,而是需要依赖P / Invoking本机API,例如HttpSetServiceConfiguration

答案 1 :(得分:0)

  

有没有办法在托管代码中完成此操作,但无需安装IIS?

是的,并且假设您作为一项具有足够权限的服务运行,可以根据需要使用Process.Start和WaitForExit调用NETSH来执行允许和禁止,并且可以在您的问题中实现所需。

NETSH的命令行语法http://technet.microsoft.com/en-us/library/cc725882(WS.10).aspx允许您执行所需的一切。

如果你想弄清楚所有的P / Invoke,但它听起来像是一个额外的麻烦,但这听起来像学术练习,更容易出现内存泄漏等等。

如果您在Windows XP上运行并担心NETSH无法满足您的需求,那么您也可以在此处获取Microsoft的HTTPCFG http://msdn.microsoft.com/en-us/library/windows/desktop/aa364478%28v=vs.85%29.aspx