Весьма вероятно, что существует проблема с сертификатом, используемым сервером для идентификации себя, когда ваш клиент устанавливает безопасное соединение SSL.По моему опыту это в первую очередь вызвано тем, что сертификат, который возвращает сервер, либо не подписан доверенным корневым центром, либо один или несколько сертификатов в цепочке недействительны (например, срок их действия истек или они относятся к домену, отличному от того, которым вы являетесьподключение к).
Чтобы определить проблему, попробуйте перейти по URL-адресу конечной точки службы и узнать, сообщает ли браузер о каких-либо проблемах.Современные браузеры предупреждают вас, если сертификат сервера недействителен, и иногда сообщают вам, почему.Если вы используете Chrome и проблема с сертификатом, вы увидите красный крестик на значке замка в левом конце адресной строки (или омнибокса).Если вы нажмете на замок, Chrome сообщит вам, почему ему не нравится сертификат.
Что касается фрагмента кода, который вы нашли, то это пример того, как реализовать проверку сертификатов сервера в качестве клиента.Сеть.Тем не менее, сам пример никогда не будет отклонять соединение с сервером, даже если есть проблема с сертификатом сервера, следовательно, комментарий о неиспользовании кода в работе.Вне тестового сценария вы никогда не захотите общаться с сервером, личности которого вы не можете доверять из-за плохого сертификата.Чтобы обеспечить «производственную» реализацию, вы должны проверить значение параметра «error», чтобы увидеть, есть ли какие-либо проблемы с сертификатом, и вернуть true, только если их нет.
using System;
using System.Net;
using System.Net.Security;
using System.Security.Cryptography.X509Certificates;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
// Attach my certificate validation delegate.
ServicePointManager.ServerCertificateValidationCallback += ValidateRemoteCertificate;
System.Net.HttpWebRequest request = WebRequest.CreateHttp("https://www.google.com");
HttpWebResponse response = request.GetResponse() as HttpWebResponse;
}
private static bool ValidateRemoteCertificate(object sender, X509Certificate cert, X509Chain chain, SslPolicyErrors error)
{
if (error == SslPolicyErrors.None)
{
return true;
}
return false;
}
}
}
В этом примере IЯ возвращаю true из моего делегата ServerCertificateValidationCallback, если значение ошибки равно SslPolicyErrors.None, в противном случае я возвращаю false, что создает исключение.Чтобы этот пример работал, я использовал Fiddler , чтобы прокси-запрос и вернуть ненадежный сертификат в мой код клиента.Если вы перейдете к https://www.google.com в нормальных условиях, вы должны не увидеть какие-либо ошибки сертификатов, так как Google играет хорошо !!
PKI с сертификатами может быть грубым доменом для работы.С точки зрения документации В Википедии есть хорошая статья о PKI , в которой рассказывается, как доверенные органы используются для подписи сертификатов, используемых в SSL, чтобы клиенты могли доверять идентификатору сервера, с которым они общаются.