#c# #.net #wcf #soap #.net-4.6
#c# #.net #wcf #soap #.net-4.6
Вопрос:
Я пытаюсь выполнить вызов SOAP WCF для внутреннего приложения из .NET 4.6.2, и я получаю сообщение об ошибке выше. Я нашел решение, которое, как я думал, сработает, но после дальнейшего изучения оно применимо только к .NET 4.5:
System.Net.ServicePointManager.ServerCertificateValidationCallback =
(se, cert, chain, sslerror) => true;
Существует ли совместимое решение для .NET 4.6? Меня не беспокоят последствия для безопасности, это только для внутреннего тестирования.
Ответ №1:
Для проверки сертификата сервера вы можете использовать следующий код в качестве альтернативы, он хорошо работает в Asp.net Также и основной проект.
//client is a proxy class object.
client.ClientCredentials.ServiceCertificate.SslCertificateAuthentication =
new X509ServiceCertificateAuthentication()
{
CertificateValidationMode = X509CertificateValidationMode.None,
RevocationMode = X509RevocationMode.NoCheck
};
Не стесняйтесь, дайте мне знать, если проблема все еще существует.
Ответ №2:
Для ServerCertificateValidationCallback требуется по крайней мере .Net 4.5 — он должен нормально работать в 4.6.2. Если он не работает, попробуйте установить его перед созданием экземпляра клиента.
В качестве дополнительного примечания вам действительно не следует отключать validate глобально, даже если это «только для тестирования», поскольку это довольно большая проблема безопасности, и эти знаменитые последние слова перед тем, как тестовое решение внезапно заработает, и вы слишком заняты, чтобы не забыть его удалить!
Как именно вы выполняете вызов? Все механизмы также имеют более целенаправленные способы отключения проверки только для этого одного вызова.
В качестве альтернативы просто поместите самозаверяющий сертификат на конечную точку и доверяйте ему на своем компьютере разработчика, тогда вы не откроете никаких дыр в безопасности.