我有一个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会发生什么呢?
提前致谢
答案 0 :(得分:4)
在WCF配置中未配置HTTPS证书。您必须为http.sys配置证书。为此,请使用具有提升权限的命令行中的netsh.exe。如果您在IIS / WAS中托管服务,则不必使用netsh,您可以configure HTTPS directly in IIS。