Описание: Запрос прерван: не удалось создать безопасный канал SSL/TLS. Не удалось создать безопасный канал SSL/TLS. Платформы сборки: Windows Server 2012, Windows 7 с пакетом обновления 1 (SP1) и Windows Server 2008 R2 SP1.
[эпизод] загрузка веб-сайта Это инструмент для загрузки всего сайта. Введите URL-адрес для загрузки одним щелчком мыши. Он прост и удобен в использовании и имеет многопоточные задачи.
Установите код перед 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, измените суффикс 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, поэтому нам приходится использовать числовое представление этого значения перечисления:
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.Tls | SecurityProtocolType.Ssl3 Значение по умолчанию для .net 4.6/4.7: SecurityProtocolType.Tls | SecurityProtocolType.Tls12 |
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; //Закрываем ssl3 ServicePointManager.SecurityProtocol |= (SecurityProtocolType)0x300 | (SecurityProtocolType)0xc00 //Добавляем поддержку 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
Эту статью написалзагрузка веб-сайтаСобрано и систематизировано, контент взят из Интернета, при перепечатке указывайте источник, спасибо.