Я создаю приложение. NET Core 3.1, в котором я пытаюсь вызвать службу WCF через HTTPS и временно отключаю SSL-аутентификацию для сертификата сервера.
Существует четко документированный способ достижения этой цели. , А именно, установив свойство ServiceCertificate.SslCertificateAuthentication
в классе ChannelFactory
.
Ниже приведен код для настройки het Binding, endpoint и ClientCredentials.
var endpointAddress = new EndpointAddress("https://*.com");
var binding = new BasicHttpsBinding();
binding.Security.Mode = BasicHttpsSecurityMode.Transport;
binding.Security.Transport = new HttpTransportSecurity()
{
ClientCredentialType = HttpClientCredentialType.None
};
var factory = new ChannelFactory<IService>(binding, endpointAddress);
factory.Credentials.ServiceCertificate.SslCertificateAuthentication = new X509ServiceCertificateAuthentication()
{
CertificateValidationMode = X509CertificateValidationMode.None,
RevocationMode = X509RevocationMode.NoCheck
};
factory.Credentials.ServiceCertificate.Authentication.CertificateValidationMode = X509CertificateValidationMode.None;
factory.Credentials.ServiceCertificate.Authentication.RevocationMode = X509RevocationMode.NoCheck;
var client = factory.CreateChannel();
client.Call();
Однако при запуске этого код я получаю цепочку исключений:
- Не удалось установить sh доверительные отношения для безопасного канала SSL / TLS с полномочиями «домен»
- Не удалось установить соединение SSL, увидеть внутреннее исключение
- Ошибка аутентификации, см. Внутреннее исключение. Полученное сообщение
- было неожиданным или неправильно отформатированным.
Я ожидаю, что клиент WCF пропустил аутентификацию SSL.
Я также пытался использовать собственный сертификат валидатор, расширив X509CertificateValidator
и сконфигурировав его следующим образом:
factory.Credentials.ServiceCertificate.SslCertificateAuthentication = new X509ServiceCertificateAuthentication()
{
CertificateValidationMode = X509CertificateValidationMode.Custom,
CustomCertificateValidator = new CustomCertificateValidator();
};
factory.Credentials.ServiceCertificate.Authentication.CertificateValidationMode = X509CertificateValidationMode.Custom;
factory.Credentials.ServiceCertificate.Authentication.CustomCertificateValidator = new CustomCertificateValidator();
Как и следовало ожидать в этом пункте, я получаю те же исключения, что и раньше. Еще хуже то, что мой метод CustomCertificate.Validate (..) вообще не вызывался.
Кажется, что WCF предоставляет API, который позволяет немного контролировать, но независимо от того, что я пытаюсь, мои политики / Кажется, что конфигурации никак не соблюдаются.
Что здесь может происходить?