[.NET] Could not create SSL/TLS secure channel

C++, C#, Visual Basic, Delphi, Perl a ostatní

Moderátor: Moderátoři Živě.cz

Odeslat příspěvekod DanHen 29. 10. 2024 10:48

Zdravim komunitu. Mam takyto kod vo vb.net:
Kód: Vybrat vše
      Dim url As String = "https:\\example.com\folder\file.exe"
      Dim destination As String = "C:\path\to\save\downloaded_file.exe"

      Try
            ' Create the request
            Dim Arequest As WebRequest = WebRequest.Create(url)
            Arequest.Method = "GET"

            ' Get the response stream and write it to a file
            Using response As WebResponse = Arequest.GetResponse()
                Using Astream As Stream = response.GetResponseStream()
                    Using fileStream As New FileStream(destination, FileMode.Create, FileAccess.Write)
                        Astream.CopyTo(fileStream)
                    End Using
                End Using
            End Using

            Console.WriteLine("Download completed successfully.")
        Catch ex As Exception
            Console.WriteLine("Error downloading file: " & ex.Message)
        End Try

v ofise mi funguje bezchybne, na roznych systemoch (win 10 a win 11). na domacom pocitaci dostanem chybu: Could not create SSL/TLS secure channel.
Obidva environmenty su rovnake: 64 bitovy system, Visual Studio 2019 Community ver. 16.11. Zaujimave je, ze z domaceho pocitaca mi WinSCP funguje bezchybne so SFTP. Ked zadam doma v browseri url na stiahnutie exe, tak mi to v pohode stiahne, aj vlastne vsetky operacie mimo VS2019 funguju korektne.
Takze tam nebude nejaky blocker / filter podla IP, alebo tak nieco (na serveri). Doma mam slovensku IP adresu, v ofise rakusku.
Skor ako zacnem otravovat vlastnika serveru, tak sa chcem opytat, ci niekoho nenapada, v com by mohol byt problem? Vychadza mi to tak, ze niekde v .NET, alebo VS2019, ale ozaj netusim kde.
Dik za Vas cas.
jedine smrt ve svete nespecha,
prichazi pomalu a v klidu
                                (kryptor)
http://danhen.lordcyber.net/
DanHen
Junior
Uživatelský avatar

Odeslat příspěvekod Krakatoa 29. 10. 2024 12:50

Nejsem programátor. Jen takový tip.
Při šifrované komunikaci posílá klient na server požadavek na typ(typy) tls, server podporuje určité tls a pak dojde k dohodnutí na jaké verzi tls komunikace bude.
Je možné, že tam, kde ti to neběží, posílá klient typ(typy) tls na server takové, které server nepodporuje. Netuším z jakého důvodu.
V prvé řadě zkus pohledat jaký typ komunikace tls podporuje ten server a pak podporovanou verzi tls nastav v tom tvém kódu. Např. na tls 1.3 (a/nebo tls 1.2)
Ten domácí počítač je Win 10 nebo Win 11?
Jaké typy tls podporuje server zjistíš tu:
https://www.ssllabs.com/ssltest/
a něco z toho prostě musí podporovat a posílat v dotazu i ten klient.
+ musí existovat aspoň jedna šifrovací sada, kterou podporuje klient i server.
Další možnost je nějaký problém s ověřením certifikátu serveru na straně klienta ( = z nějakého dúvodu je nedůvěryhodný).
Krakatoa
Junior

Odeslat příspěvekod JirkaVejrazka 29. 10. 2024 21:18

"na domacom pocitaci dostanem chybu: Could not create SSL/TLS secure channel." - k te chybe vetsinou byvaji uvedene i nejake detaily, pripadne aspon nejaky ciselny kod. Bez toho je to vesteni z kristalove koule. Nejspis ti doma chybi nejake DLL, seznam komponent ve Visual Studiu jsi asi neporovnaval, ze?

Dim url As String = "https:\\example.com\folder\file.exe" - vazne mas v URL zpetna lomitka?

Ten ciselny kod chyby nebo jakakoli dalsi metadata snad neco napovi. Jinak je to opravdu vesteni z kristalove koule a uz jsem v tehle oblasti videl dost zvlastnich chyb - od obskurni knihovny, ktera nepodporovala SNI az po problem s prilis dlouhym user-agentem v GET pozadavku, ktery nedokazal "skousnout" lokalni antivirus.
JirkaVejrazka
Mírně pokročilý

Odeslat příspěvekod DanHen 30. 10. 2024 07:13

Jirka: teraz vyzeram ako tazka lama, vsak? ten text je Exception.toString(). Pozriem cely stacktrace, samozreme, a ked z neho nic nezistim, tak ho pastnem nejak rozumne. Zoznam komponentov neviem presne, ale verzie VS2019 mam obidve rovnake, tak predpokladam, ze aj zoznam komponentov (dll) je viac menej rovnaky. Moze to vsak byt nejake dll, to nevylucujem. Co sa tyka obskurity, tiez ako koder som uz videl vela sialenstiev, a s tymto si jednoducho poradit neviem, preto sa pytam, ze mozno niekto nieco podobne riesil.
Krakatoa: Ohladom TSL / SSL som si tiez myslel, ze to moze byt problem. Ide vsak o to, ze doma mi viac takychto veci chodi, ako som pisal - napriklad WinSCP, ktory pouzivam na pracu so subormi na danom serveri. Certifikat je urcite doveryhodny, co sa tyka presneho typu sifrovania, tak neviem. Server nie je moj, hostujem u znameho, onehda prechadzal z http na https. Musel som si upravit niekolko aplikacii na android, ale bez problemov. takisto pristup k filom na serveri som musel zmenit z klasickeho ftp na sftp. bez problemov aj to, co sa tyka klientov na win - cize WinSCP s SFTP, na androide pouzivam total commander s SFTP pluginom - takisto v pohode. stiahnut file z daneho servera viem bez problemov cez browser na androide, aj win - akykolvek. Aj cez aplikaciu to viem na androide - mam nakodenych viac apps na android, ktore pouzivaju dany server - vyuzivam to ako update pre svoje apps - upravil som si ich na sftp, a v pohode chodia. a dokonca aj na win - vsade, okrem domaceho pocitaca. Urcite bude zadrhel niekde lokalne - v domacom pocitaci, ale netusim aky - preto sa pytam ;)
Domaci pocitac je W10. aplikacia je kodena striedavo doma (W10) a v ofice (W11). Avsak v ofise mam k dispozicii viac PC, a testoval som to aj na W10. V ofise vsetko chodi. Verzie OS mozu byt mierne rozdielne (office vs home), ale vzdy je to microsofti 64 bit moderny system, ze ziadne win7, alebo nebodaj xp.
jedine smrt ve svete nespecha,
prichazi pomalu a v klidu
                                (kryptor)
http://danhen.lordcyber.net/
DanHen
Junior
Uživatelský avatar

Odeslat příspěvekod JirkaVejrazka 30. 10. 2024 07:37

O lamach jsem nic nepsal, ani si nic takoveho nemyslel :)
JirkaVejrazka
Mírně pokročilý

Odeslat příspěvekod DanHen 30. 10. 2024 07:54

JirkaVejrazka píše:O lamach jsem nic nepsal, ani si nic takoveho nemyslel :)

Ale ano, minimalne s backslashmi v url, plus vypis chyby :) doma sa k tomu dostanem najskor v nedelu, ked nic nevyriesim, dam viac infos.
jedine smrt ve svete nespecha,
prichazi pomalu a v klidu
                                (kryptor)
http://danhen.lordcyber.net/
DanHen
Junior
Uživatelský avatar

Odeslat příspěvekod Krakatoa 30. 10. 2024 11:01

Nezáleží jestli ti něco dalšího chodí nebo nechodí, záleží na tom, jak se chová konkrétní program (klient) při připojování k serveru pomocí tls. A v čem tuším problém, jsem napsal.
A ještě mě napadlo.
Tu:
https://learn.microsoft.com/cs-cz/dotne ... est.create
u .Net 8 se píše, že je WebRequest.Create zastaralá.
Sice to nepíše u .Net Frameworku a ani netuším co používáš za verzi .Net, každopádně co tak zkusit něco jiného než WebRequest.Create? Konkrétně HttpClient:
https://learn.microsoft.com/cs-cz/dotne ... httpclient
Krakatoa
Junior

Odeslat příspěvekod Just_jo 30. 10. 2024 16:22

Tak mě napadlo - možná to bude blbost - ale ISP může blokovat IPv6 spojení a v zaměstnání to může být povolené.

Ale jak říkám, nevím jak moc je relevantní v tomto případě. Konektivita na IPv6 lze otestovat
Just_jo
Junior
Uživatelský avatar

Odeslat příspěvekod DanHen 4. 11. 2024 06:48

Dakujem vsetkym za snahu pomoct.
WebRequest.Create moze byt zastarala, ale v tom nie je problem. K problemu dochadza aj pri pouziti HttpClient.
ISP urcite neblokuje IPV6 konektivitu.
Cez vikend som sa pripojil cez vpn do ofisu a zacal som trochu patrat. Metodou pokus omyl som prisiel na to, ze chyba je v .NET frameworku. Aplikacia targetuje na .NET 4.0. Tento framework nepodporuje niektore security prvky pri web konektivite (konkretne TSL11 a 12). Aj napriek tomu, ze aplikacia targetuje na .NET 4.0 sa tieto prvky pouzivaju defaultne, pokial je na danom stroji nainstaleny framework vyssi ako 4.0. A prave v tomto je problem. Nainstalene frameworky na danych strojoch su rozdielne, aj ked target .NET je rovnaky. Cize defakto mal Jirka pravdu - chyba nejake dll, resp. je rozdielne. Krakatoa - dik za odkaz na kvalitny web, zide sa do buducnosti.
Prajem vsetkym pekny den ;)
D.
jedine smrt ve svete nespecha,
prichazi pomalu a v klidu
                                (kryptor)
http://danhen.lordcyber.net/
DanHen
Junior
Uživatelský avatar

Odeslat příspěvekod Krakatoa 4. 11. 2024 11:38

DanHen:

S tebou je to těžký.
Tak znova.
Rozeberu to co jsem psal hned v prvním příspěvku.
Je soubor na nějakém serveru.
Dejme tomu, že ten server má nastavení jako forum.zive.cz:
https://www.ssllabs.com/ssltest/analyze ... um.zive.cz
Tedy podporuje TLS 1.3 a TLS 1.2. A nepodporuje TLS 1.1 a starší. Což je spravně a je to běžné nastavení serveru v roce 2024.
A pak tam máš ještě uvedené podporované šifrovací sady toho serveru, například šifra TLS_AES_128_GCM_SHA256 atd.
Když člověk bude chtít stáhnout soubor z takového serveru, tak to stáhne, protože:
1) prohlížeče podporují TLS 1.3 a TLS 1.2 a běžné šifry na uvedeném serveru, naopak dokonce vyžadují např. min verzi TLS 1.2. Když tedy budu chtít stáhnout soubor z takového serveru v prohlížeči tak prohlížeč si se serverem domluví verzi a šifru, na které proběhne komunikace, např. TLS 1.3 a TLS_AES_128_GCM_SHA256. A z toho se dá vyvozovat to, že ten server minimálně TLS 1.2 podporuje a podporuje i běžné šifry.
2) Podobně jako v bodě 1) to platí pro různé programy, např. WinSCP, proto ti to přes tento program funguje.
3) Podobně jako v bodě 1) to platí pro .NET programy, protože ve Windows 10 je předinstalovaný .NET framework 4.8 a ve Windows 11 .NET framework 4.8.1 a tyto frameworky TLS 1.2 a TLS 1.3 podporují a podporují i běžné šifry na serveru. A proto jak píšeš ti ten tvůj program na pc mimo tvůj pc funguje.
4) Dokonce by měl ten program fungovat i na starších frameworcích, jako je ten ve VS2019 .NET Framework 4.7.2 (defaultně ve Windows 10 1803 a 1809).

Takže problém by neměl vzniknout, jenže ty ho máš.
Píšeš, že tipuješ, že ti chybí dll. Podle mě je to ale nesmysl, kdyby ti chyběla nějaká dll, tak ti to vyhodí chybovou hlášku, že ti chybí nějaká dll. A .NET framefork tam máš.
Já v .NET neprogramuju, ale jak už píšu nebo naznačuju od prvního příspěvku, prostě máš rozdrbané nastavení Windows nebo .NET framework a ten tvůj program na tvém pc prostě z toho důvodu posílá na server buď nepodporované TLS nebo nepodporované šifry.
Takže řešením je buď si dát do pořádku nastavení Windows nebo .NET frameworku tak, aby ti na server posílal podporované TLS a šifry tak jak to posílá ten program ve Win 10 a Win 11 mimo tvůj pc ... nebo si TLS a šifry nastav přímo v programu a vynuť si prostě takové, které podporuje ten server.

... a pár poznámek,
"Aplikacia targetuje na .NET 4.0" Jako fakt .NET 4.0??? To je verze z VS2010, od VS2022 už nepodporovaná. Ale i na ní by to jet mělo, když ti ten program funguje na počítačích s Windows 10 a Windows 11 mimo tvůj pc... čistě teoreticky ti to tam třeba bere nějaké nastavení z .NET 4.0 skrz VS2019, které normálně už ve Win 10 a Win 11 nejsou... => v tom případě se budu opakovat "nebo si TLS a šifry nastav přímo v programu a vynuť si prostě takové, které podporuje ten server." Je i možné, že se to vynucení bude dát někde nastavit v registru Windows.
"pokial je na danom stroji nainstaleny framework vyssi ako 4.0"
Což jsou všechny, Win 10 4.8 (nebo 4.8.1) a Win 11 4.8.1 a psal jsi, že to na Win 10 a Win 11 funguje...

No jak cheš, je to tvůj boj, já jsem k tomu už řekl vše.
Klidně si řeš chybějící dll a klidně dál ignoruj co píšu :-)
Krakatoa
Junior


Kdo je online

Uživatelé procházející toto fórum: Žádní registrovaní uživatelé a 0 návštevníků