不使用IIS的WCF服务上的证书

Vac*_*ano 4 ssl wcf certificate ssl-certificate

我有一个WCF应用程序,通常在IIS中运行(对于我的测试和生产环境).但是当我从我的调试器运行它时,它被设置为运行自托管(即,弹出一个控制台窗口并且不使用IIS).

我还有一个连接到WCF应用程序的客户端应用程序.通常,当我测试我的客户端应用程序(在Windows Mobile上运行)时,它会设置为连接到我的一个测试环境(我有一个开发环境供我测试).

我现在遇到的问题是,客户端发送的内容与WCF应用程序的内容之间似乎存在脱节.我需要调试我的WCF应用程序.

我可以运行我的WCF应用程序,然后更改我的客户端的URL以指向调试器版本,但我的服务使用SSL运行并且具有客户端硬编码的证书.

我宁愿不禁用我的代码中的那部分(在客户端上).有没有办法在我的自托管WCF应用程序上安装证书?

Mik*_*las 8

我只想添加一些有用的信息,说明如何以编程方式为自托管WCF服务安装SSL证书.这不包括如何让WCF应用程序使用SSL证书,因为这在Web上的其他地方都有详细记录.

这应由管理员在设置时运行,而不是由实际应用程序本身运行,在本示例中,实际应用程序本身在受限Network Service帐户下运行.

然后,您可以使用这些代码示例来安装和配置证书:

if (!IsAdministrator())
{
   Console.WriteLine("Must run "+
                "as a user with local Administrator privileges.");
   Environment.Exit(-1);
}

//Open the cert.
X509Certificate2 certificate = new X509Certificate2(certFilePath);

//Add it to the local store
X509Store certStore = new X509Store(StoreName.My, StoreLocation.LocalMachine);
certStore.Open(OpenFlags.ReadWrite);
certStore.Add(certificate);
certStore.Close();

//Reserve an HTTPS namespace for it.
string urlPrefix = string.Format("https://+:{0}/{1}", portNum, appPath);
ReserveHttpNamespace.ModifyReservation(urlPrefix, "Network Service", false);

//Set the SSL cert for this service.
SetSSLCert.BindCertificate("0.0.0.0", portNum, certificate.GetCertHash());
Run Code Online (Sandbox Code Playgroud)

然后,您可以使用有用的HttpCfg UI工具检查这是否正确运行.