C # Игнорировать ошибки сертификата?

Во время запроса веб-службы к удаленной веб-службе я получаю следующую ошибку:

Не удалось установить доверительные отношения для безопасного канала SSL / TLS. —> System.Security.Authentication.AuthenticationException: удаленный сертификат недействителен в соответствии с процедурой проверки.

Есть ли вообще игнорировать эту ошибку и продолжить?

Кажется, что удаленный сертификат не подписан.

Сайт, к www.czebox.cz я подключаюсь, – www.czebox.cz – так что не стесняйтесь посетить сайт и обратите внимание даже на браузеры через исключения безопасности.

Добавьте обработчик проверки сертификатов. Возврат true позволяет игнорировать ошибку проверки:

 ServicePointManager .ServerCertificateValidationCallback += (sender, cert, chain, sslPolicyErrors) => true; 

Метод IgnoreBadCertificates:

 //I use a method to ignore bad certs caused by misc errors IgnoreBadCertificates(); // after the Ignore call i can do what ever i want... HttpWebRequest request_data = System.Net.WebRequest.Create(urlquerystring) as HttpWebRequest; /* and below the Methods we are using... */ ///  /// Together with the AcceptAllCertifications method right /// below this causes to bypass errors caused by SLL-Errors. ///  public static void IgnoreBadCertificates() { System.Net.ServicePointManager.ServerCertificateValidationCallback = new System.Net.Security.RemoteCertificateValidationCallback(AcceptAllCertifications); } ///  /// In Short: the Method solves the Problem of broken Certificates. /// Sometime when requesting Data and the sending Webserverconnection /// is based on a SSL Connection, an Error is caused by Servers whoes /// Certificate(s) have Errors. Like when the Cert is out of date /// and much more... So at this point when calling the method, /// this behaviour is prevented ///  ///  ///  ///  ///  /// true private static bool AcceptAllCertifications(object sender, System.Security.Cryptography.X509Certificates.X509Certificate certification, System.Security.Cryptography.X509Certificates.X509Chain chain, System.Net.Security.SslPolicyErrors sslPolicyErrors) { return true; } 

Причина, по которой он терпит неудачу, заключается не в том, что он не подписан, а потому, что ваш корневой сертификат не доверяет вашему клиенту. Вместо того, чтобы отключать проверку SSL, альтернативный подход заключался бы в том, чтобы добавить корневой сертификат CA в список центров сертификации ваших приложений.

Это корневой сертификат CA, которому ваше приложение в настоящее время не доверяет:

—– BEGIN CERTIFICATE —– MIIFnDCCBISgAwIBAgIBZDANBgkqhkiG9w0BAQsFADBbMQswCQYDVQQGEwJDWjEs MCoGA1UECgwjxIxlc2vDoSBwb8WhdGEsIHMucC4gW0nEjCA0NzExNDk4M10xHjAc BgNVBAMTFVBvc3RTaWdudW0gUm9vdCBRQ0EgMjAeFw0xMDAxMTkwODA0MzFaFw0y NTAxMTkwODA0MzFaMFsxCzAJBgNVBAYTAkNaMSwwKgYDVQQKDCPEjGVza8OhIHBv xaF0YSwgcy5wLiBbScSMIDQ3MTE0OTgzXTEeMBwGA1UEAxMVUG9zdFNpZ251bSBS b290IFFDQSAyMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAoFz8yBxf 2gf1uN0GGXknvGHwurpp4Lw3ZPWZB6nEBDGjSGIXK0Or6Xa3ZT + tVDTeUUjT133G 7Vs51D6z / ShWy + 9T7a1f6XInakewyFj8PT0EdZ4tAybNYdEUO / dShg2WvUyfZfXH 0jmmZm6qUDy0VfKQfiyWchQRi / Ax6zXaU2 + X3hXBfvRMr5l6zgxYVATEyxCfOLM9 a5U6lhpyCDf2Gg6dPc5Cy6QwYGGpYER1fzLGsN9stdutkwlP13DHU1Sp6W5ywtfL owYaV1bqOOdARbAoJ7q8LO6EBjyIVr03mFusPaMCOzcEn3zL5XafknM36Vqtdmqz IWR + 3URAUgqE0wIDAQABo4ICaTCCAmUwgaUGA1UdHwSBnTCBmjAxoC + gLYYraHR0 cDovL3d3dy5wb3N0c2lnbnVtLmN6L2NybC9wc3Jvb3RxY2EyLmNybDAyoDCgLoYs aHR0cDovL3d3dzIucG9zdHNpZ251bS5jei9jcmwvcHNyb290cWNhMi5jcmwwMaAv oC2GK2h0dHA6Ly9wb3N0c2lnbnVtLnR0Yy5jei9jcmwvcHNyb290cWNhMi5jcm WW gfEGA1UdIASB6TCB5jCB4wYEVR0gADCB2jCB1wYIKwYBBQUHAgIwgcoagcdUZW50 byBrdmFsaWZpa292YW55IHN5c3RlbW92eSBjZXJ0aWZpa2F0IGJ5bCB2eWRhbiBw b2RsZSB6YWtvbmEgMjI3LzIwMDBTYi4gYSBuYXZhem55Y2ggcHJlZHBpc3UvVGhp cyBxdWFsaWZpZWQgc3lzdGVtIGNlcnRpZmljYXRlIHdhcyBpc3N1ZWQgYWNjb3Jk aW5nIHRvIExhdyBObyAyMjcvMjAwMENvbGwuIGFuZCByZWxhdGVkIHJlZ3VsYXRp b25zMBIGA1UdEwEB / wQIMAYBAf8CAQEwDgYDVR0PAQH / BAQDAgEGMB0GA1UdDgQW BBQVKYzFRWmruLPD6v5LuDHY3PDndjCBgwYDVR0jBHwweoAUFSmMxUVpq7izw + R + S7gx2Nzw53ahX6RdMFsxCzAJBgNVBAYTAkNaMSwwKgYDVQQKDCPEjGVza8OhIHBv xaF0YSwgcy5wLiBbScSMIDQ3MTE0OTgzXTEeMBwGA1UEAxMVUG9zdFNpZ251bSBS b290IFFDQSAyggFkMA0GCSqGSIb3DQEBCwUAA4IBAQBeKtoLQKFqWJEgLNxPbQNN 5OTjbpOTEEkq2jFI0tUhtRx // 6zwuqJCzfO / KqggUrHBca + Г.В. / qXcNzNAlytyM71 FMV / VwgL9gBHTN / IFIw100JbciI23yFQTdF / UoEfK / т + IFfirxSRi8LRERdXHTEb vwxMXIzZVXloWvX64UwWtf4Tvw5bAoPj0O1Z2ly4aMTAT2a + у + z184UhuZ / oGyMw eIakmFM7M7RrNki507jiSLTzuaFMCpyWOX7ULIhzY6xKdm5iQLjTvExn2JTvVChF Y + Juu / G0zAdLyeU4vaXdQm1A8AEiJPTd0Z9LAxL6Sq2iraLNN36 + NyEK / ts3mPLL

—– КОНЕЦ СЕРТИФИКАТА —–

Вы можете декодировать и просматривать этот сертификат, используя

этот декодер сертификата или другой декодер сертификата

Разрешить все сертификаты очень мощные, но это также может быть опасно. Если вы хотите разрешить действительные сертификаты и некоторые определенные сертификаты, это можно сделать так.

 System.Net.ServicePointManager.ServerCertificateValidationCallback += delegate ( object sender, X509Certificate cert, X509Chain chain, SslPolicyErrors sslPolicyErrors) { if (sslPolicyErrors == SslPolicyErrors.None) { return true; //Is valid } if (cert.GetCertHashString() == "99E92D8447AEF30483B1D7527812C9B7B3A915A7") { return true; } return false; }; 

Обновить:

Как получить значение cert.GetCertHashString() в Chrome:

Нажмите « Secure или « Not Secure в адресной строке.

введите описание изображения здесь

введите описание изображения здесь

Затем нажмите «Сертификат» -> «Подробности» -> «Отбросить» и скопируйте значение. Не забудьте сделать cert.GetCertHashString().ToLower() .

введите описание изображения здесь

Отключить проверку сертификата ssl в конфигурации клиента.

          

Этот код работал для меня. Я должен был добавить TLS2, потому что это то, что меня интересует URL.

 ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12; ServicePointManager.ServerCertificateValidationCallback += (sender, cert, chain, sslPolicyErrors) => { return true; }; using (var client = new HttpClient()) { client.BaseAddress = new Uri(UserDataUrl); client.DefaultRequestHeaders.Accept.Clear(); client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); Task response = client.GetStringAsync(UserDataUrl); response.Wait(); if (response.Exception != null) { return null; } return JsonConvert.DeserializeObject(response.Result); } 

Если вы используете сокеты напрямую и аутентифицируетесь как клиент, тогда метод обратного вызова Service Point Manager не будет работать. Вот что для меня работало. ПОЖАЛУЙСТА, ИСПОЛЬЗУЙТЕ ТОЛЬКО ДЛЯ ИСПЫТАНИЯ ЦЕЛЕЙ .

 var activeStream = new SslStream(networkStream, false, (a, b, c, d) => { return true; }); await activeStream.AuthenticateAsClientAsync("computer.local"); 

Ключевым моментом здесь является предоставление обратного вызова проверки подлинности удаленного сертификата в конструкторе streamа SSL.

Для дальнейшего расширения должности BIGNUM – в идеале вы хотите, чтобы решение, которое будет имитировать условия, которые вы увидите в процессе производства, и изменение кода не будет делать этого и может быть опасным, если вы забудете взять код перед его развертыванием.

Вам понадобится самоподписанный сертификат. Если вы знаете, что делаете, вы можете использовать бинарный BIGNUM, но если нет, вы можете пойти на охоту за сертификатом. Если вы используете IIS Express, у вас будет один из них, вам просто нужно его найти. Откройте Firefox или любой другой браузер, который вам нравится, и перейдите на свой веб-сайт dev. Вы должны иметь возможность просматривать информацию сертификата из строки URL, и в зависимости от вашего браузера вы должны иметь возможность экспортировать сертификат в файл.

Затем откройте MMC.exe и добавьте оснастку «Сертификат». Импортируйте файл сертификата в хранилище доверенных корневых центров сертификации, и это все, что вам нужно. Важно убедиться, что он входит в этот магазин, а не в какой-нибудь другой магазин, например «Личный». Если вы не знакомы с MMC или сертификатами, есть многочисленные веб-сайты с информацией о том, как это сделать.

Теперь ваш компьютер в целом будет неявным образом доверять любым сертификатам, которые он сам сгенерировал, и вам не нужно будет добавлять код для обработки этого специально. Когда вы перейдете к производству, он будет продолжать работать, если у вас есть правильный действующий сертификат, установленный там. Не делайте этого на производственном сервере – это было бы плохо, и оно не будет работать для других клиентов, кроме тех, которые есть на самом сервере.

  • почему Java не отправляет сертификат клиента во время подтверждения SSL?
  • Thunderbird: Ошибка: imap.server.com: сервер не поддерживает RFC 5746, см. CVE-2009-3555
  • Какие версии SSL / TLS поддерживают System.Net.WebRequest?
  • JavaMail IMAP через SSL довольно медленно - Массовая выборка нескольких сообщений
  • ограничение отладки java ssl debug
  • Самоподписанный сертификат SSL или CA?
  • Использование JavaMail с TLS
  • Поддерживает ли Android Volley SSL?
  • Запретить Google Chrome «Ваше подключение не является частным» для конкретного адреса?
  • Заставить браузер загружать «https» версию веб-сайта, а не «http»?
  • ASP.NET MVC RequireHttps только в производстве
  • Давайте будем гением компьютера.