Опис: запит скасовано: не вдалося створити безпечний канал 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;
Якщо наведений вище метод не працює, це проблема системного рівня. Оновіть системний патч відповідно до системи, яку ви зараз використовуєте.
Оновлення, щоб увімкнути 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
Скопіюйте наведений нижче код реєстру та імпортуйте його до реєстру. Створіть новий текстовий файл, змініть суфікс txt на reg (ключ реєстру) та імпортуйте (зробіть резервну копію перед імпортом)
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Internet Settings\WinHttp] "DefaultSecureProtocols"=dword:00000a00 [HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Internet Settings\WinHttp] "DefaultSecureProtocols"=dword:00000a00 [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Internet Settings] "SecureProtocols"=dword:00000a80 [HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings] "SecureProtocols"=dword:00000a80
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Internet Settings\WinHttp] "DefaultSecureProtocols"=dword:00000800 [HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Internet Settings\WinHttp] "DefaultSecureProtocols"=dword:00000800 [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.1\Client] "DisabledByDefault"=dword:00000000 "Enabled"=dword:00000001 [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.1\Server] "DisabledByDefault"=dword:00000000 "Enabled"=dword:00000001 [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Client] "DisabledByDefault"=dword:00000000 "Enabled"=dword:00000001 [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Server] "DisabledByDefault"=dword:00000000 "Enabled"=dword:00000001
PowerShell відкривається:
[Net.ServicePointManager]::SecurityProtocol [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Ssl3 -bor [Net.SecurityProtocolType]::Tls -bor [Net.SecurityProtocolType]::Tls11 -bor [Net.SecurityProtocolType]::Tls12
Перший рядок коду перевіряє підтримувану версію TLS, другий рядок коду змінює підтримку TLS.
Жоден із попередніх двох методів не спрацює, тому ви можете використовувати лише найкращий метод:
Примітка: для певних версій TSL, які підтримуються кожною версією Windows, зверніться до додаткової інформації в цій статті.
Рішення існують, але вони залежать від версії фреймворку:
.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.
Побачити:
Можливо, довжина ключа сертифіката, наданого веб-сайтом, становить 512 біт, і відповідно до чинних галузевих стандартів він повинен містити відкритий ключ не менше 2048 біт. В оновленні системи безпеки Microsoft від вересня 2016 р. у відповідь на цю проблему зазначено, що якщо довжина відкритого ключа менше 2048 байт (наприклад, RSA 512),Windows може скасувати підключення HTTPS
2012 R2 and Windows 8
2008 R2 and Windows 7
SecurityProtocolType.Tls1.0=0xC0; SecurityProtocolType.Tls1.1=0x300; SecurityProtocolType.Tls1.2=0xC00;
.net 4.0/4.5 значення за умовчанням: SecurityProtocolType.Ssl3 .net 4.6/4.7 значення за замовчуванням: SecurityProtocolType.Tls11 |
SCH_USE_STRONG_CRYPTO Цей прапорець автоматично використовуватиметься в .NET Framework 4.6 https://support.microsoft.com/en-us/help/3154518/support-for-tls-system-default-versions-included-in-the-net-framework У Win7Sp1 і .Net 3.5.1 підтримується TLS1.2
ServicePointManager.SecurityProtocol &= ~SecurityProtocolType.Ssl3; //Додати підтримку для 1.1 і 1.2
Висновок TLS1.2 такий:
Модифікація реєстру під .net4
Windows Registry Editor Version 5.00 [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\v4.0.30319] "SchUseStrongCrypto"=dword:00000001 [HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\.NETFramework\v4.0.30319] "SchUseStrongCrypto"=dword:00000001
Ця стаття написаназавантаження веб-сайтуЗібрано та впорядковано, вміст походить з Інтернету, під час передруку вказуйте джерело, дякую.