BasicHttpBinding使用带有自签名证书的传输安全性

时间:2011-04-21 05:05:30

标签: wcf ssl certificate

我有一个WCF服务,在一个ServiceHost中的不同端点使用BasicHttpBinding和NetTcpBinding。 NetTcp正在使用自签名证书,该证书是从文件加载的,一切都很好,直到我尝试实际使用BasicHttpBinding,所以我这样做:

在服务器上:

var ServiceHost host = new ServiceHost(blah blah);
host.Credentials.ServiceCertificate.Certificate = GetCertificate(); //load a certificate from file
host.Credentials.ClientCertificate.Authentication.CertificateValidationMode = X509CertificateValidationMode.None;
var httpBinding = new BasicHttpBinding();
httpBinding.Security.Mode = BasicHttpSecurityMode.Transport;
httpBinding.Security.Transport.ClientCredentialType = HttpClientCredentialType.Certificate;

在客户端:

ChannelFactory.Credentials.ServiceCertificate.Authentication.CertificateValidationMode = X509CertificateValidationMode.None;
var cer = GetCertificate();
ChannelFactory.Credentials.ClientCertificate.Certificate = cer;

var httpBinding = new BasicHttpBinding();
httpBinding.Security.Mode = BasicHttpSecurityMode.Transport;
httpBinding.Security.Transport.ClientCredentialType = HttpClientCredentialType.Certificate;
//accept any cert
System.Net.ServicePointManager.ServerCertificateValidationCallback =
                ((sender, certificate, chain, sslPolicyErrors) => true);

然而,当连接时,我收到此错误

  

异常 - 发生错误   发出HTTP请求   https://localhost/MyService。这个   可能是因为这个事实   未配置服务器证书   适当地使用HTTPS中的HTTP.SYS   案件。这也可能是由a引起的   安全绑定不匹配   在客户端和服务器之间。

证书没有安装,并且它与net tcp绑定工作正常,我想我必须错过一些小的东西?

有一点我注意到net.tcp是双工通道,而基本http是单工,我相信设置有区别吗?例如,我需要在net.tcp的两端加载证书,那么基本的http会发生什么呢?

提前致谢

1 个答案:

答案 0 :(得分:4)

在WCF配置中未配置HTTPS证书。您必须为http.sys配置证书。为此,请使用具有提升权限的命令行中的netsh.exe。如果您在IIS / WAS中托管服务,则不必使用netsh,您可以configure HTTPS directly in IIS