C# 无法运行WCF https web服务
我已经创建了一个C# 无法运行WCF https web服务,c#,visual-studio-2010,wcf,ssl,ssl-certificate,C#,Visual Studio 2010,Wcf,Ssl,Ssl Certificate,我已经创建了一个wcfhttp自托管web服务。现在我想把它转换成HTTPS。因此,我遵循以下几点: 跟随页面创建证书,并将其绑定到特定端口。 我使用mmc->console root创建一个证书,并遵循上面链接中写的相同步骤 然后,我运行以下命令将端口与证书绑定: netsh http add sslcert ipport=0.0.0.0:8000 certhash=0000000000003ed9cd0c315bbb6dc1c08da5e6 appid={00112233-4455-6677
wcfhttp
自托管web服务。现在我想把它转换成HTTPS
。因此,我遵循以下几点:
跟随页面创建证书
,并将其绑定到特定端口。
我使用mmc
->console root
创建一个证书,并遵循上面链接中写的相同步骤
然后,我运行以下命令将端口与证书绑定:
netsh http add sslcert ipport=0.0.0.0:8000 certhash=0000000000003ed9cd0c315bbb6dc1c08da5e6 appid={00112233-4455-6677-8899-AABBCCDDEEFF}
我根据我的证书更改certhash
。我还检查了创建的证书信息
,得到了这个
我还在粘贴项目中编写的代码,以便在绑定端口上运行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
。它工作正常。以下是创建HTTPS
WCF自托管
web服务的步骤
- 首先,使用netsh为端口的保留添加名称空间:
netsh http添加urlacl url=https://127.0.0.1+:8085/用户=所有人
- 键入以下命令以创建客户端证书:
makecert-sk RootCA-sky signature-pe-n CN=localhost-r-sr LocalMachine-ss Root MyCA.cer
- 现在创建服务器证书:
makecert-sk server-sky exchange-pe-n CN=localhost-ir LocalMachine-is Root-ic MyCA.cer-sr LocalMachine-ss My MyAdHocTestCert.cer
\Program files\Microsoft SDK\Windows\v7.0A\Bin
中创建了两个新的证书
文件,名称分别为MyCA.cer
和MyADHOCTESCERT.cer
打开server certificate
即MyAdHocTestCert.cer
并从details
选项卡中选择thumbprint
- 选择
并删除其中的所有空格thumbprint
- 现在,使用以下命令将端口与此证书绑定:
netsh http add sslcert ipport=127.0.0.1:8085 certhash=0000000000003ed9cd0c315bbb6dc1c08da5e6 appid={00112233-4455-6677-8899-AABBCCDDEEFF}clientcertnegotiation=enable
主机地址和端口:放置与第一步中选择的地址相同的地址ipport:
指纹certhash:
netsh http show sslcert
,您会得到如下结果:
现在为WSHTTPbinding编写以下代码:
WebHttpBinding _binding = new WebHttpBinding();
_binding.Security.Mode = WebHttpSecurityMode.Transport;
_binding.Security.Transport.ClientCredentialType = HttpClientCredentialType.None;
m_serviceHost = new WebServiceHost(typeof(Serviceclass), new Uri("https://127.0.0.1:8085/"));
m_serviceHost.Credentials.ServiceCertificate.SetCertificate(StoreLocation.LocalMachine, StoreName.My, X509FindType.FindByThumbprint, "611fe7748c5883f8082351744604a8c917608290");
ServiceEndpoint ep = m_serviceHost.AddServiceEndpoint(typeof(InstanceClass), _binding, "hello");
m_serviceHost.Open();
现在创建您的消费者以使用此自托管WS以下是创建
HTTPS
WCF自托管
web服务的步骤
- 首先,使用netsh为端口的保留添加名称空间:
netsh http添加urlacl url=https://127.0.0.1+:8085/用户=所有人
- 键入以下命令以创建客户端证书:
makecert-sk RootCA-sky signature-pe-n CN=localhost-r-sr LocalMachine-ss Root MyCA.cer
- 现在创建服务器证书:
makecert-sk server-sky exchange-pe-n CN=localhost-ir LocalMachine-is Root-ic MyCA.cer-sr LocalMachine-ss My MyAdHocTestCert.cer
\Program files\Microsoft SDK\Windows\v7.0A\Bin
中创建了两个新的证书
文件,名称分别为MyCA.cer
和MyADHOCTESCERT.cer
打开server certificate
即MyAdHocTestCert.cer
并从details
选项卡中选择thumbprint
- 选择
并删除其中的所有空格thumbprint
- 现在,使用以下命令将端口与此证书绑定:
netsh http add sslcert ipport=127.0.0.1:8085 certhash=0000000000003ed9cd0c315bbb6dc1c08da5e6 appid={00112233-4455-6677-8899-AABBCCDDEEFF}clientcertnegotiation=enable
主机地址和端口:放置与第一步中选择的地址相同的地址ipport:
指纹certhash:
netsh http show sslcert
,您会得到如下结果:
现在为WSHTTPbinding编写以下代码:
WebHttpBinding _binding = new WebHttpBinding();
_binding.Security.Mode = WebHttpSecurityMode.Transport;
_binding.Security.Transport.ClientCredentialType = HttpClientCredentialType.None;
m_serviceHost = new WebServiceHost(typeof(Serviceclass), new Uri("https://127.0.0.1:8085/"));
m_serviceHost.Credentials.ServiceCertificate.SetCertificate(StoreLocation.LocalMachine, StoreName.My, X509FindType.FindByThumbprint, "611fe7748c5883f8082351744604a8c917608290");
ServiceEndpoint ep = m_serviceHost.AddServiceEndpoint(typeof(InstanceClass), _binding, "hello");
m_serviceHost.Open();
现在创建您的消费者以使用此自托管WS您仍然使用FindBySubjectName,主题名称为“contoso.com”。这是证书中使用的名称吗?在m_serviceHost.AddServiceEndpoint()中,您正在添加未配置安全模式的新WebHttpBinding()。您可能应该使用以前创建的“绑定”。但我仍然感到惊讶的是,您在启动时没有看到任何错误。另外,如果您继续看到问题,请尝试添加跟踪,看看是否可以从中获得更多信息。@MortenMertner从何处可以看到我的证书名称?您仍在使用FindBySubjectName和“contoso.com”作为主题名称。这是证书中使用的名称吗?在m_serviceHost.AddServiceEndpoint()中,您正在添加未配置安全模式的新WebHttpBinding()。您可能应该使用以前创建的“绑定”。但我仍然感到惊讶的是,您在启动时没有看到任何错误。另外,如果您继续看到问题,请尝试添加跟踪,并查看是否从中获得更多信息。@MortenMertner从何处可以看到我的证书名称?使用SSL创建自托管web服务的整个过程。我犯的错误是,我从错误的点创建证书这是使用SSL创建自托管web服务的整个过程。我犯的错误是t