0

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

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

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

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

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

所以,问题是 - 有没有办法在托管代码中完成这个,但不必安装 IIS?

4

2 回答 2

1

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

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

于 2013-01-16T20:21:21.107 回答
0

有什么方法可以在托管代码中完成此操作,而无需安装 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

于 2013-01-16T14:17:39.993 回答