【问题标题】:Enable SSL binding for self-hosted WCF service为自托管 WCF 服务启用 SSL 绑定
【发布时间】:2013-01-15 22:38:30
【问题描述】:

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

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

  2. 于是我找到了以下sn-p:

        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();
        }
    

它可以工作,但是这需要安装 IIS。否则我会得到以下异常:

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

所以,问题是 - 有没有办法在托管代码中完成此任务,而无需安装 IIS?

【问题讨论】:

  • 对于 NETSH 要求,没有直接的 .net 替代品 (afaik)。您可以从命令行开关调用 NETSH 命令到您的应用程序 /mode=install 或类似的东西中。
  • 如果您想在代码中执行此操作,您还可以查看使用 P/Invoke 访问 NETSH;虽然如果这只是为了安装应用程序,我认为 Paul 的解决方案更好(也更容易)。
  • 我不想将此添加为 netsh 的要求。我需要能够从应用程序内部执行多次。基本上是按需打开和关闭。
  • 我理解不想引入依赖项,但据我所知,您最终需要使用提升的 priv 与 NETSH 进行交互以进行所需的更改。因此,在应用程序中即时执行此操作也需要您这样做。
  • @PaulFarry:应用程序是在本地系统帐户下运行的 NT 服务,因此在提升的权限下运行某些东西不是问题

标签: .net wcf iis ssl-certificate


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    有没有办法在托管代码中完成此任务,而无需安装 IIS?

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

    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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-07-04
      • 1970-01-01
      • 2020-03-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多