Я нахожусь в процессе создания клиента WCF для веб-службы SOAP HTTPS в. Net Core 2.1.
Поставщик услуг предоставил файл .key и .cert, который я преобразовал в файл .p12 с помощью openssl. Добавив это в хранилище ключей, я могу через SoapUI успешно отправить запрос в веб-службу (никакой другой проверки подлинности, кроме сертификата, не требуется).
Чтобы выполнить ту же операцию в. Net Ядро Я добавил подключенную службу в свой проект с помощью мастера WCF в Visual Studio. Эта услуга основана на предоставленном сервисном контракте (файл WSDL). Затем я установил сертификат .p12 локально на моем P C, и я использую следующий код для выполнения запроса. «MyService» - это подключенная служба.
var binding = new BasicHttpsBinding();
binding.Security.Mode = BasicHttpsSecurityMode.Transport;
binding.Security.Transport.ClientCredentialType = HttpClientCredentialType.Certificate;
binding.Security.Transport.ProxyCredentialType = HttpProxyCredentialType.None;
var endpoint = new EndpointAddress("https://x.x.x.x:8300/MyService.asmx");
var channelFactory = new ChannelFactory<MyService>(binding, endpoint);
channelFactory.Credentials.Windows.AllowedImpersonationLevel = System.Security.Principal.TokenImpersonationLevel.Impersonation;
channelFactory.Credentials.ServiceCertificate.SslCertificateAuthentication = new X509ServiceCertificateAuthentication()
{
CertificateValidationMode = X509CertificateValidationMode.None,
RevocationMode = X509RevocationMode.NoCheck,
TrustedStoreLocation = StoreLocation.LocalMachine
};
channelFactory.Credentials.ClientCertificate.SetCertificate(
StoreLocation.CurrentUser,
StoreName.My,
X509FindType.FindByIssuerName,
"xxxxxxxxxxxxxxxxxxxxxxxxxx");
var service = channelFactory.CreateChannel();
ExecuteResponse response = service.Execute(new ExecuteRequest());
При выполнении этого кода я получаю следующую ошибку:
System.ServiceModel.Security.MessageSecurityException: 'HTTP-запрос несанкционированный со схемой аутентификации клиента «Аноним». Заголовок аутентификации, полученный от сервера, был 'Negotiate'. '
Странно то, что мне разрешено сделать запрос, если я использую HttpClientHandler, который говорит мне, что должно быть несоответствие между Основная структура двух реализаций. Кто-нибудь, кто знает, как я могу исправить эту ошибку?