BasicHttpBinding с использованием транспортной безопасности с самозаверяющим сертификатом - PullRequest
4 голосов
/ 21 апреля 2011

У меня есть служба WCF, использующая как BasicHttpBinding, так и NetTcpBinding на разных конечных точках в пределах одного ServiceHost.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. Это может быть связано ск факту, что сертификат сервера не настроен должным образом с HTTP.SYS в случае HTTPS.Это также может быть вызвано несоответствием привязки безопасности между клиентом и сервером.

сертификат не установлен, и он работал нормально с привязкой по протоколу net tcp. Думаю, я пропустил что-то маленькое?

Одна вещь, которую я заметил, - net.tcp - дуплексный канал, в то время как базовый http - симплекс, я уверен, что есть разница в настройке?Например, мне нужно было загрузить сертификат на обоих концах для net.tcp, что тогда будет с базовым http?

Заранее спасибо

1 Ответ

4 голосов
/ 21 апреля 2011

Сертификат для HTTPS не настроен в конфигурации WCF.Вы должны настроить сертификат для http.sys.Для этого используйте netsh.exe из командной строки с повышенными привилегиями.Если вы размещаете свой сервис в IIS / WAS, вам не нужно использовать netsh, и вы можете настроить HTTPS непосредственно в IIS .

...