【发布时间】:2013-02-20 20:54:38
【问题描述】:
我创建了一个WCF HTTP 自托管网络服务。现在我想把它转换成HTTPS。所以我遵循以下几点:
跟随this 页面创建certificates 并将其绑定到特定端口。
我使用mmc-> console root 创建了一个证书,并按照上面链接中的相同步骤进行操作。
然后我运行以下命令将端口与证书绑定:
netsh http add sslcert ipport=0.0.0.0:8000 certhash=0000000000003ed9cd0c315bbb6dc1c08da5e6 appid={00112233-4455-6677-8899-AABBCCDDEEFF}
我根据我的证书更改certhash。我还检查了Created certificate info 并得到了这个。
我还粘贴了我的项目中编写的代码以在绑定端口上运行 Web 服务:
try
{
m_running = true;
private static String m_baseAddress = "https://10.0.0.1:8083";
WebHttpBinding _binding = new WebHttpBinding();
_binding.Security.Mode = WebHttpSecurityMode.Transport;
_binding.Security.Transport.ClientCredentialType = HttpClientCredentialType.Certificate;
m_serviceHost = new WebServiceHost(typeof(TService), new Uri(m_serviceAddress));
m_serviceHost.Credentials.ServiceCertificate.SetCertificate(StoreLocation.LocalMachine, StoreName.My, X509FindType.FindBySubjectName,"contoso.com");
ServiceEndpoint ep = m_serviceHost.AddServiceEndpoint(typeof(TContract), _binding, "");
m_serviceHost.Open();
}
catch(Exception e){ }
每当我重建我的项目并运行它时。它总是开始一秒钟然后停止。我检查了日志,没有任何内容。
但是当我删除这一行时
m_serviceHost.Credentials.ServiceCertificate.SetCertificate(StoreLocation.LocalMachine, StoreName.My, X509FindType.FindBySubjectName,"contoso.com");
并将https 替换为http。它工作正常。
【问题讨论】:
-
您仍在使用 FindBySubjectName,主题名称为“contoso.com”。那是您证书中使用的名称吗?
-
在您的 m_serviceHost.AddServiceEndpoint() 中,您正在添加一个未配置安全模式的新 WebHttpBinding()。您可能应该使用您之前创建的“绑定”。但令我惊讶的是,您在启动时没有看到任何错误。此外,如果您继续看到问题,请尝试添加跟踪,看看您是否获得了更多信息。
-
@MortenMertner 从哪里可以看到我的证书名称?
标签: c# visual-studio-2010 wcf ssl ssl-certificate