Я пытаюсь установить 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 сертификат),
Вы делаете его правильно с ServerCertificateValidationCallback. Это не проблема, с которой Вы сталкиваетесь. Проблема, с которой Вы сталкиваетесь, наиболее вероятна версия протокола SSL/TLS.
, Например, если Ваш сервер предлагает только SSLv3 и TLSv10 и Ваш клиент, нуждается в TLSv12 затем, Вы получите это сообщение об ошибке. То, что необходимо сделать, должно удостовериться, что обоим клиентам и серверам поддерживали версию общего протокола.
, Когда мне нужен клиент, который может соединиться с как можно большим количеством серверов (а не быть максимально безопасным) я использую это (вместе с установкой обратного вызова проверки):
ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3 | SecurityProtocolType.Tls | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12;
Мы решали ту же проблему как раз сегодня и все, что необходимо сделать, должен увеличиться, версия среды выполнения.NET
4.5.2 не работала на нас с вышеупомянутой проблемой, в то время как 4.6.1 был OK
, Если необходимо сохранить версию.NET, затем установите
ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3 | SecurityProtocolType.Tls | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12;
Так же, как развитие для любого, все еще сталкиваясь с этим †“я добавил 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 стоящий предоставления этому попытку.
переместите эту строку: ServicePointManager. SecurityProtocol = SecurityProtocolType. Ssl3 | SecurityProtocolType. Tls | SecurityProtocolType. Tls11 | SecurityProtocolType. Tls12;
Перед этой строкой: HttpWebRequest запрашивают = (HttpWebRequest) WebRequest. Создайте (uri);
Исходное сообщение: обновление системы защиты KB4344167 взламывает Код TLS
Если Вы используете новое доменное имя, и Вы сделали все вышеупомянутое, и Вы все еще получаете ту же ошибку, проверяете, чтобы видеть, очищаете ли Вы кэш 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.
Я столкнулся с этим потоком, потому что у меня также была ошибка , не Мог создать безопасный канал 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 ...
, Надо надеяться, мой опыт мог бы помочь кому-то еще, у кого есть мой конкретный аромат этой проблемы.