WCF в ядре asp.net 2.0 - не удалось установить доверительные отношения для безопасного канала SSL / TLS с полномочиями - PullRequest
0 голосов
/ 20 октября 2018

Ранее у меня была структура таргетинга приложений 4.5.1 и я использовал веб-ссылку для добавления службы WCF.Это прекрасно работает и может успешно пройти проверку подлинности на сервере.

старый код:

ServicePointManager.Expect100Continue = false;
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;

IService orderService = new Service();

// private method to load certificate
var cert = LoadCertificate(@"....\00050._.1.p12", "pwd");

oIPGApiOrderService.ClientCertificates.Add(cert);

oIPGApiOrderService.Url = @"service_url";

NetworkCredential nc = new NetworkCredential("username", "pwd");
oIPGApiOrderService.Credentials = nc;

Сейчас я обновляюсь до .net core 2.0 и нацеливаюсь.net стандарт 2.0.Я добавил, что сервис использует ссылку на сервис (подключенный сервис).Сгенерированный код изменился, который использовал фабрику канала и т. Д. *

Новый код:

ServicePointManager.Expect100Continue = false;
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;

System.ServiceModel.BasicHttpBinding result = new System.ServiceModel.BasicHttpBinding();
result.MaxBufferSize = int.MaxValue;
result.ReaderQuotas = System.Xml.XmlDictionaryReaderQuotas.Max;
result.MaxReceivedMessageSize = int.MaxValue;
result.AllowCookies = true;
result.Security.Mode = System.ServiceModel.BasicHttpSecurityMode.Transport;

IService client = new Service(result, new EndpointAddress("service_url"));

client.ClientCredentials.ClientCertificate.Certificate = new X509Certificate2(@"....\00050._.1.p12", "pwd");

client.ClientCredentials.UserName.UserName = "username";
client.ClientCredentials.UserName.Password = "pwd";

Но новый код не работает, хотя сертификаты загружены успешно.Я получаю исключение:

{System.ServiceModel.Security.SecurityNegotiationException: Could not establish trust relationship for the SSL/TLS secure channel with authority 'xxxxxxx-online.com'. ---> System.Net.Http.HttpRequestException: An error occurred while sending the request. ---> System.Net.Http.WinHttpException: A security error occurred

Любая помощь от вас, ребята, будет очень признательна.Я что-то упустил?

1 Ответ

0 голосов
/ 07 ноября 2018

Если вы используете ненадежный сертификат сервера (например, автоподписку), вы должны использовать это:

client.ClientCredentials.ServiceCertificate.SslCertificateAuthentication =
        new X509ServiceCertificateAuthentication()
        {
            CertificateValidationMode = X509CertificateValidationMode.None,
            RevocationMode = System.Security.Cryptography.X509Certificates.X509RevocationMode.NoCheck
        };
...