Не удалось создать безопасный канал SSL/TLS, несмотря на установку ServerCertificateValidationCallback

Я пытаюсь установить SSL/соединение TLS к тестовому серверу с самоподписанным сертификатом. Коммуникация через небезопасный канал работала без проблем.

Вот мой код кода, который я написал на основе этого решениям: Разрешение недоверяемых сертификатов SSL с HttpClient C# Игнорируют ошибки сертификата? Клиент.NET, соединяющийся с ssl сетью API

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

var c = new HttpClient();
var r = c.GetAsync("https://10.3.0.1:8443/rest/v1").Result;
if (r.IsSuccessStatusCode)
{
    Log.AddMessage(r.Content.Get());
}
else
{
    Log.AddMessage(string.Format("{0} ({1})", (int)r.StatusCode, r.ReasonPhrase));
}

также попробованный это:

var handler = new WebRequestHandler();
handler.ServerCertificateValidationCallback = delegate { return true; };
var c = new HttpClient(handler);
...

и это

ServicePointManager.ServerCertificateValidationCallback = delegate { return true; };

но каждый раз у меня есть исключение:

InnerException: System.Net.Http.HttpRequestException
   _HResult=-2146233088
   _message=An error occurred while sending the request.
   HResult=-2146233088
   IsTransient=false
   Message=An error occurred while sending the request.
   InnerException: System.Net.WebException
        _HResult=-2146233079
        _message=The request was aborted: Could not create SSL/TLS secure channel.
        HResult=-2146233079
        IsTransient=false
        Message=The request was aborted: Could not create SSL/TLS secure channel.
        Source=System
        StackTrace:
             at System.Net.HttpWebRequest.EndGetResponse(IAsyncResult asyncResult)
             at System.Net.Http.HttpClientHandler.GetResponseCallback(IAsyncResult ar)
        InnerException: 

Что я делаю неправильно? Почему я не могу соединиться с этим сервером (который имеет invalid-self-signed сертификат),

62
задан 7 October 2015 в 17:07

6 ответов

Вы делаете его правильно с ServerCertificateValidationCallback. Это не проблема, с которой Вы сталкиваетесь. Проблема, с которой Вы сталкиваетесь, наиболее вероятна версия протокола SSL/TLS.

, Например, если Ваш сервер предлагает только SSLv3 и TLSv10 и Ваш клиент, нуждается в TLSv12 затем, Вы получите это сообщение об ошибке. То, что необходимо сделать, должно удостовериться, что обоим клиентам и серверам поддерживали версию общего протокола.

, Когда мне нужен клиент, который может соединиться с как можно большим количеством серверов (а не быть максимально безопасным) я использую это (вместе с установкой обратного вызова проверки):

  ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3 | SecurityProtocolType.Tls | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12;
122
ответ дан 31 October 2019 в 13:31

Мы решали ту же проблему как раз сегодня и все, что необходимо сделать, должен увеличиться, версия среды выполнения.NET

4.5.2 не работала на нас с вышеупомянутой проблемой, в то время как 4.6.1 был OK

, Если необходимо сохранить версию.NET, затем установите

ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3 | SecurityProtocolType.Tls | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12;
16
ответ дан 31 October 2019 в 13:31

Так же, как развитие для любого, все еще сталкиваясь с этим †“я добавил ServicePointManager. Опции SecurityProfile, как отмечено в решении:

ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3 | SecurityProtocolType.Tls | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12;

И все же я продолжал добираться, тот же запрос “The был прерван: не Мог создать безопасную channel” ошибку SSL/TLS. Я пытался подключить к некоторым более старым речевым серверам с HTTPS API-интерфейсы SOAP (т.е. голосовая почта, телефонные системы IP etc†¦ несколько установленных годы назад). Они только поддерживают соединения SSL3, когда они обновились несколько лет назад.

можно было бы думать включая SSl3 в списке SecurityProtocols, добьется цели здесь, но это didn’t. Единственным путем я мог вызвать соединение, должен был включать ТОЛЬКО протокол Ssl3 и никаких других:

ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3;

Затем соединение проходит †“, походит на ошибку мне, но этот didn’t начинает бросать ошибки до недавнего времени на инструменты, я предусматриваю эти серверы, которые были там в течение многих лет †“, я полагаю, что Microsoft начала развертывать системные изменения, которые обновили это поведение для принуждения соединений TLS, если нет никакой другой альтернативы.

Так или иначе †“, если you’re, все еще сталкивающийся с этим против некоторых старых сайтов/серверов, it’s стоящий предоставления этому попытку.

12
ответ дан 31 October 2019 в 13:31

переместите эту строку: ServicePointManager. SecurityProtocol = SecurityProtocolType. Ssl3 | SecurityProtocolType. Tls | SecurityProtocolType. Tls11 | SecurityProtocolType. Tls12;

Перед этой строкой: HttpWebRequest запрашивают = (HttpWebRequest) WebRequest. Создайте (uri);

Исходное сообщение: обновление системы защиты KB4344167 взламывает Код TLS

1
ответ дан 31 October 2019 в 13:31

Если Вы используете новое доменное имя, и Вы сделали все вышеупомянутое, и Вы все еще получаете ту же ошибку, проверяете, чтобы видеть, очищаете ли Вы кэш DNS на своем ПК. Очищают Ваш DNS для получения дополнительной информации.

WindowsВ® 8

Для очистки кэша DNS при использовании Windows 8 выполните следующие шаги:

На Вашей клавиатуре, нажмите Win+X для открытия WinX Menu.

Щелкают правой кнопкой по Command Prompt и выбирают Выполнение как Администратора.

Выполнение следующая команда:

ipconfig/flushdns

, Если команда успешно выполняется, система, возвращает следующее сообщение:

конфигурация IP Windows успешно сбросила Кэш Сопоставителя DNS.

WindowsВ® 7

Для очистки кэша DNS при использовании Windows 7 выполните следующие шаги:

Щелчок Запускаются.

Вводят cmd в поле искомого текста Меню "Пуск".

Щелкают правой кнопкой по Command Prompt и выбирают Выполнение как Администратора.

Выполнение следующая команда:

ipconfig/flushdns

, Если команда успешно выполняется, система, возвращает следующее сообщение: конфигурация IP Windows успешно сбросила Кэш Сопоставителя DNS.

0
ответ дан 31 October 2019 в 13:31

Я столкнулся с этим потоком, потому что у меня также была ошибка , не Мог создать безопасный канал SSL/TLS. В моем случае, я пытался получить доступ к конфигурации Siebel REST API от PowerShell с помощью Invoke-RestMethod, и ни одно из предложений выше помогшего.

В конечном счете я споткнулся через причину моей проблемы: сервер я связывался с требуемой клиентской аутентификацией сертификата.

, Чтобы выполнить вызовы работать, я должен был предоставить клиентский сертификат (включая закрытый ключ) с -Certificate параметр:

$Pwd = 'certificatepassword'
$Pfx = New-Object -TypeName 'System.Security.Cryptography.X509Certificates.X509Certificate2'
$Pfx.Import('clientcert.p12', $Pwd, 'Exportable,PersistKeySet')
Invoke-RestMethod -Uri 'https://your.rest.host/api/' -Certificate $Pfx -OtherParam ...

, Надо надеяться, мой опыт мог бы помочь кому-то еще, у кого есть мой конкретный аромат этой проблемы.

0
ответ дан 31 October 2019 в 13:31

Другие вопросы по тегам:

Похожие вопросы: