【发布时间】:2013-01-15 22:38:30
【问题描述】:
我运行一个自托管的 WCF 服务,我想使用自签名 SSL 证书来保护它。为此,我需要将此 SSL 证书与某个端口绑定。有几种方法可以做到:
根据这个http://msdn.microsoft.com/en-us/library/ms733791.aspx,我可以使用
netsh,它可以工作,但我不想依赖于netsh,而是从.NET代码中做所有事情。-
于是我找到了以下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