Причини та рішення для "Запит було перервано та не вдалося створити захищений канал SSL/TLS"
Опис: запит скасовано: не вдалося створити безпечний канал SSL/TLS. Не вдалося створити безпечний канал SSL/TLS.
Платформи збірки: Windows Server 2012, Windows 7 Service Pack 1 (SP1) і Windows Server 2008 R2 SP1
Рішення перше:
Встановіть код перед HttpWebRequest
ServicePointManager.Expect100Continue = true;
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12 | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls;
ServicePointManager.ServerCertificateValidationCallback = (sender, certificate, chain, errors) => true;
Рішення 2
- Якщо наведений вище метод не працює, це проблема системного рівня. Оновіть системний патч відповідно до системи, яку ви зараз використовуєте.
Оновлення, щоб увімкнути TLS 1.1 і TLS 1.2 як стандартні протоколи безпеки в WinHTTP у Windows, це оновлення забезпечує підтримку безпеки транспортного рівня (TLS) у Windows Server 2012, Windows 7 з пакетом оновлень 1 (SP1) і Windows Server 2008 R2 SP1 1.1 і підтримку TLS 1.2, будь ласка, зверніться до офіційної документаціїhttps://support.microsoft.com/en-us/help/3140245/update-to-enable-tls-1-1-and-tls-1-2-as-default-secure-protocols-in-wi
оновлення патча
Встановити значення за умовчанням
- Увімкніть TLS 1.1 і 1.2 у Windows 7 на рівні компонента SChannel (прийміть одне з оновлень 2.1 або 2.2 нижче)
2.1. Microsoft встановлює та оновлює реєстр:http://download.microsoft.com/download/0/6/5/0658B1A7-6D2E-474F-BC2C-D69E5B9E9A68/MicrosoftEasyFix51044.msi
2.2 Оновіть реєстр вручну, скопіюйте наступний код реєстру та імпортуйте його в реєстр. Створіть новий текстовий файл, змініть суфікс txt на reg (ключ реєстру) та імпортуйте (зробіть резервну копію перед імпортом)
1 | [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Internet Settings\WinHttp] |
Система перевірки
- Перевірте, чи підтримує система TLS1.2, TLS1.3
PowerShell відкривається:
Net.ServicePointManager::SecurityProtocol = [Net.SecurityProtocolType]::Ssl3 -bor [Net.SecurityProtocolType]::Tls -bor [Net.SecurityProtocolType]::Tls11 -bor [Net.SecurityProtocolType]::Tls12
Рішення третє
- Жоден із попередніх двох методів не спрацює. Для оновлення системи до Windows 10 можна використовувати лише найкращий метод.
Інший довідковий контент
https://blogs.perficient.com/2016/04/28/tsl-1-2-and-net-support/
Рішення існують, але вони залежать від версії фреймворку:
.NET 4.6 і вище. Для підтримки TLS 1.2 не потрібно виконувати жодних додаткових робіт, він підтримується за замовчуванням.
.NET 4.5. TLS 1.2 підтримується, але це не стандартний протокол. Вам потрібно вибрати його використання. Наступний код встановлює TLS 1.2 за замовчуванням, обов’язково запустіть його перед підключенням до безпечного ресурсу:
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12
.NET 4.0. TLS 1.2 не підтримується, але якщо у вашій системі встановлено .NET 4.5 (або новішої версії), ви все ще можете використовувати TLS 1.2, навіть якщо ваша програма не підтримує TLS 1.2. Єдина проблема полягає в тому, що SecurityProtocolType у .NET 4.0 не має запису для TLS1.2, тому ми повинні використовувати числове представлення цього значення enum:
ServicePointManager.SecurityProtocol =(SecurityProtocolType)3072;
.NET 3.5 або старішої версії. TLS 1.2(*) не підтримується, і немає обхідного шляху. Оновіть свою програму до останньої версії фреймворку.
PS Для сценарію 3 також існує хак реєстру, який змусить 4.5 використовувати TLS 1.2 за замовчуванням без програмного примусу.
PPS Як зазначає нижче Крістіан Поп від Microsoft, доступний останній патч для .NET 3.5, який підтримує TLS1.2.
Побачити:
KB3154518 – Reliability Rollup HR-1605 – NDP 2.0 SP2 – Win7 SP1/Win 2008 R2 SP1
KB3154519 – Reliability Rollup HR-1605 – NDP 2.0 SP2 – Win8 RTM/Win 2012 RTM
KB3154520 – Reliability Rollup HR-1605 – NDP 2.0 SP2 – Win8.1RTM/Win 2012 R2 RTM
KB3156421 -1605 HotFix Rollup through Windows Update for Windows 10.