Opis: Żądanie przerwane: utworzenie bezpiecznego kanału SSL/TLS nie powiodło się. Nie można utworzyć bezpiecznego kanału SSL/TLS. Platformy kompilacji: Windows Server 2012, Windows 7 z dodatkiem Service Pack 1 (SP1) i Windows Server 2008 R2 SP1
[epizod] pobranie strony internetowej Jest to narzędzie do pobierania obejmujące całą witrynę. Wpisz adres URL, aby pobrać jednym kliknięciem. Jest proste i łatwe w obsłudze oraz oferuje zadania wielowątkowe.
Ustaw kod przed HttpWebRequest
ServicePointManager.Expect100Continue = true; ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12 | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls; ServicePointManager.ServerCertificateValidationCallback = (sender, certificate, chain, errors) => true;
Jeśli powyższa metoda nie zadziała, jest to problem na poziomie systemu. Zaktualizuj poprawkę systemową zgodnie z systemem, którego aktualnie używasz.
Aktualizacja umożliwiająca włączenie TLS 1.1 i TLS 1.2 jako domyślnych protokołów zabezpieczeń w WinHTTP w systemie Windows. Ta aktualizacja zapewnia obsługę protokołu Transport Layer Security (TLS) w systemach Windows Server 2012, Windows 7 z dodatkiem Service Pack 1 (SP1) i Windows Server 2008 R2 SP1 1.1 i TLS 1.2, zapoznaj się z oficjalną dokumentacją https://support.microsoft.com/en-us/help/3140245/update-to-enable-tls-1-1-and-tls-1-2-as-default-secure-protocols-in-wi
Skopiuj następujący kod rejestru i zaimportuj go do rejestru. Utwórz nowy plik txt, zmień przyrostek txt na reg (klucz rejestru) i zaimportuj (wykonaj kopię zapasową przed importem)
[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
Otwiera się PowerShell:
[Net.ServicePointManager]::SecurityProtocol [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Ssl3 -bor [Net.SecurityProtocolType]::Tls -bor [Net.SecurityProtocolType]::Tls11 -bor [Net.SecurityProtocolType]::Tls12
Pierwsza linia kodu sprawdza obsługiwaną wersję protokołu TLS. Druga linia kodu modyfikuje obsługę protokołu TLS.
Żadna z dwóch poprzednich metod nie będzie działać, więc możesz użyć tylko metody ostatecznej:
Uwaga: w przypadku konkretnych wersji TSL obsługiwanych przez każdą wersję systemu Windows, zapoznaj się z dodatkowymi informacjami w tym artykule.
Rozwiązania istnieją, ale zależą od wersji frameworka:
.NET 4.6 i nowsze wersje. Nie musisz wykonywać żadnej dodatkowej pracy, aby obsługiwać TLS 1.2, jest on obsługiwany domyślnie.
.NET 4.5. Obsługiwany jest protokół TLS 1.2, ale nie jest to protokół domyślny. Musisz zdecydować się z niego skorzystać. Poniższy kod ustawia domyślnie protokół TLS 1.2. Pamiętaj, aby go wykonać przed połączeniem się z bezpiecznym zasobem:
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12
.NET 4.0. Protokół TLS 1.2 nie jest obsługiwany, ale jeśli w systemie jest zainstalowana platforma .NET 4.5 (lub nowsza wersja), nadal masz możliwość korzystania z protokołu TLS 1.2, nawet jeśli Twoja aplikacja nie obsługuje protokołu TLS 1.2. Jedynym problemem jest to, że SecurityProtocolType w .NET 4.0 nie ma wpisu dla TLS1.2, więc musimy użyć numerycznej reprezentacji tej wartości wyliczeniowej:
ServicePointManager.SecurityProtocol = (Typ protokołu bezpieczeństwa) 3072;
.NET 3.5 lub nowsza wersja. Protokół TLS 1.2(*) nie jest obsługiwany i nie ma żadnego obejścia. Zaktualizuj swoją aplikację do najnowszej wersji frameworka.
PS W scenariuszu 3 istnieje również hack rejestru, który wymusi domyślne używanie protokołu TLS 1.2 w wersji 4.5 bez konieczności wymuszania tego programowo. PPS Jak wspomniał poniżej Christian Pop z Microsoftu, dostępna jest najnowsza łatka dla .NET 3.5, która umożliwia obsługę protokołu TLS1.2.
Widzieć:
Być może długość klucza certyfikatu podawana przez witrynę wynosi 512 bitów i zgodnie z obowiązującymi standardami branżowymi powinien zawierać klucz publiczny o długości nie mniejszej niż 2048 bitów. Aktualizacja zabezpieczeń firmy Microsoft z września 2016 r. rozwiązała ten problem, stwierdzając, że jeśli długość klucza publicznego jest mniejsza niż 2048 bajtów (np. RSA 512),System Windows może anulować połączenia HTTPS
2012 R2 and Windows 8
2008 R2 and Windows 7
SecurityProtocolType.Tls1.0=0xC0; SecurityProtocolType.Tls1.1=0x300; SecurityProtocolType.Tls1.2=0xC00;
Wartość domyślna .net 4.0/4.5: SecurityProtocolType.Tls |. SecurityProtocolType.Ssl3 Wartość domyślna .net 4.6/4.7: SecurityProtocolType.Tls | SecurityProtocolType.Tls11 |
SCH_USE_STRONG_CRYPTO Ta flaga będzie używana automatycznie w .NET Framework 4.6 https://support.microsoft.com/en-us/help/3154518/support-for-tls-system-default-versions-included-in-the-net-framework W Win7Sp1 i .Net 3.5.1 obsługiwany jest TLS1.2
ServicePointManager.SecurityProtocol &= ~SecurityProtocolType.Ssl3; //Zamknij ssl3 ServicePointManager.SecurityProtocol |= (SecurityProtocolType)0x300 | (SecurityProtocolType)0xc00;
Wniosek z TLS1.2 jest następujący:
Modyfikacja rejestru pod .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
Ten artykuł został napisany przezpobranie strony internetowejZebrane i uporządkowane, treść pochodzi z Internetu, przy przedruku prosimy o podanie źródła, dziękujemy.