我有一个WCF应用程序,通常在IIS中运行(对于我的测试和生产环境)。但是当我从我的调试器运行它时,它被设置为运行自托管(即,弹出一个控制台窗口并且不使用IIS)。
我还有一个连接到WCF应用程序的客户端应用程序。通常当我测试我的客户端应用程序(运行在Windows Mobile上)时,它会设置为连接到我的一个测试环境(我有一个开发环境供我测试)。
我现在遇到的问题是,客户端发送的内容与WCF应用程序的内容之间似乎存在脱节。我需要调试我的WCF应用程序。
我可以运行我的WCF应用程序,然后更改我的客户端的URL以指向调试器版本,但我的服务运行SSL并且有一个证书,证明客户端是硬编码的。
我宁愿不禁用我的代码中的那部分(在客户端上)。有没有办法在我自己托管的WCF应用程序上安装证书?
答案 0 :(得分:8)
我只想添加一些有用的信息,说明如何以编程方式为自托管WCF服务安装SSL证书。这不包括如何获取WCF application to use the SSL certificate,因为这在网络上的其他地方都有详细记载。
这应由管理员在设置时运行,而不是由实际应用程序本身运行,在此示例中,该应用程序本身在有限的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());
然后,您可以使用有用的HttpCfg UI Tool检查这是否正常运行。
答案 1 :(得分:0)
是的,您必须拥有HTTPS的基本或端点地址,并且还必须通过行为指定服务证书
<behaviors>
<behavior configurationName="BasicSecurityProfileMutualCertificateBehavior"
returnUnknownExceptionsAsFaults="true">
<serviceCredentials>
<serviceCertificate findValue="Bob"
storeLocation="LocalMachine" storeName="My" x509FindType="FindBySubjectName" />
</serviceCredentials>
</behavior>
</behaviors>