Entwickler-Ecke
Internet / Netzwerk - Indy TIdHTTP - Fehler bei IdHTTP1.Get
galagher - So 15.12.24 10:36
Titel: Indy TIdHTTP - Fehler bei IdHTTP1.Get
Ich verwende in meinem Programm die Indy-Komponenten TIdHTTP und TIdSSLIOHandlerSocketOpenSSL. Wenn ich Text mit
s := IdHTTP1.Get(Edit1.Text); auslesen will, entsteht der folgende Fehler:
Zitat: |
Fehler beim Verbinden mit SSL.
error:1409442E:SSL routines:SSL3_READ_BYTES:tlsv1 alert protocol version |
Was bedeutet das?
Unter Windows7 funktionierte es noch.
Die Eigenschaft IdHTTP1.Request.UserAgent ist vorgabemäßig "Mozilla/3.0 (compatible; Indy Library)". Mozilla
3.0! Ehrlich gesagt, habe ich keine Ahnung, ob ich das so lassen kann oder irgendwie anpassen muss oder was ich sonst bei IdHTTP1 anpassen muss, damit es wieder funktioniert.
Vielleicht kennt sich da jemand besser aus als ich!
Moderiert von
Th69: Titel geändert ("Jedi"->"Indy").
Ralf Jansen - So 15.12.24 16:02
Du scheinst mit irgendeinem Server per Tls1 sprechen zu wollen. Die meisten Server lehnen das mittlerweile als unsicher (zurecht) ab. Irgendwo kann man bestimmt via Indy die zu benutzen Tls Version vorgeben. Zumindest Tls 1.2 solltest du vorgeben, besser 1.3, aber das funktioniert erst ab Windows 11 richtig.
galagher - So 15.12.24 19:27
Ralf Jansen hat folgendes geschrieben : |
Irgendwo kann man bestimmt via Indy die zu benutzen Tls Version vorgeben. |
Bei TIdSSLIOHandlerSocketOpenSSL gibt es die Einstellung "SSLVersions" im OI (oder auch per Code):
Delphi-Quelltext
1:
| IdSSLIOHandlerSocketOpenSSL1.SSLOptions.SSLVersions := [sslvTLSv1]; |
Alternativ:
Delphi-Quelltext
1:
| IdSSLIOHandlerSocketOpenSSL1.SSLOptions.Method := sslvTLSv1; |
Ist es das, was du meinst?
sslvTLSv1 ist die Voreinstellung, es funktioniert aber leider keine der verfügbaren Optionen: sslvSSLv2, sslvSSLv3, sslvTLSv1, sslvTLSv1_1, sslvTLSv1_2, wobei sslvSSLv23 alle genannten auf True setzt, selbst aber nicht gesetzt werden kann (bleibt immer False).
Und was hat es mit "Mozilla 3.0" auf sich? Diese Version ist doch total veraltet!
jaenicke - So 15.12.24 20:48
Kann es sein, dass schlicht deine OpenSSL-DLLs zu alt sind? Unter Windows 7 gingen noch TLS 1.0 und TLS 1.1, wohingegen diese in Windows 11 nicht mehr standardmäßig zur Verfügung stehen. Vielleicht hast du aber DLLs, die nichts Neueres können.
galagher hat folgendes geschrieben : |
Und was hat es mit "Mozilla 3.0" auf sich? Diese Version ist doch total veraltet! |
Das ist nur einn String zur Identifikation des Useragents. Der sagt dem Server also, was für ein Client dranhängt, damit der Server darauf reagieren kann. Zum Beispiel wurde für den Internet Explorer damals wegen Bugs manchmal anderer Code ausgeliefert.
Ralf Jansen - So 15.12.24 20:48
Zitat: |
Und was hat es mit "Mozilla 3.0" auf sich? Diese Version ist doch total veraltet! |
Hat nix mit deinem TLS Problem zu tun. In den User Agent kannst du rein schreiben was du willst. Das der Server daran irgendwas filtert ist ein Ding der 00er Jahre. Jeder Serverbetreiber sollte gemerkt haben das man den User Agent beliebig setzen kann und beliebig gesetzt wird und nichts aussagt. Wenn du Nett sein will schreib da den Applikationsnamen deiner Anwendung mit rein. Gibt dem Serverbetreiber eine Möglichkeit für seine Statistiken.
galagher - Mo 16.12.24 06:21
jaenicke hat folgendes geschrieben : |
Kann es sein, dass schlicht deine OpenSSL-DLLs zu alt sind? |
Kann schon sein, ich weiß nicht... :nixweiss: War nie ein Thema für mich, Internetzugang habe ich, und gut ist's.
Was also soll ich da genau machen? Sind die OpenSSL eine "Delphi-Sache"? Die OpenSSL-DLLs aktualisieren? Wie? :nixweiss:
galagher - Di 17.12.24 06:13
Habe auch im Internet nichts Hilfreiches zu dem Thema gefunden, also hoffe ich, dass hier jemand eine Lösung hat. Was kann ich tun?
jaenicke - Di 17.12.24 13:12
Die aktuellen DLLs für OpenSSL findest du hier:
https://github.com/IndySockets/OpenSSL-Binaries
Für 32-Bit brauchst du also die openssl-1.0.2u-i386-win32.zip. Die Dateien kannst du direkt neben deine Exe legen wie gewohnt.
galagher - Di 17.12.24 17:17
jaenicke hat folgendes geschrieben : |
Die Dateien kannst du direkt neben deine Exe legen wie gewohnt. |
Ich habe beide dll's in den Ordner meiner exe-Datei entpackt und erhalte wieder dies:
Delphi-Quelltext
1: 2:
| Fehler beim Verbinden mit SSL. error:1409442E:SSL routines:ssl3_read_bytes:tlsv1 alert protocol version |
Oder meintest du "direkt neben deine Exe legen" anders? Ich meine, ich habe früher, unter Windows7, doch auch keine dll-Dateien zu meiner exe gegeben, und es hat funktioniert.
jaenicke - Di 17.12.24 17:38
galagher hat folgendes geschrieben : |
Oder meintest du "direkt neben deine Exe legen" anders? Ich meine, ich habe früher, unter Windows7, doch auch keine dll-Dateien zu meiner exe gegeben, und es hat funktioniert. |
Dann lagen diese zufälligerweise irgendwo auf deinem System herum und deine Exe hat die gekapert. ;-)
Kannst du vielleicht eine Beispieladresse nennen, bei der das auftritt? Hast du es mit verschiedenen Servern versucht?
galagher - Di 17.12.24 17:50
jaenicke hat folgendes geschrieben : |
Kannst du vielleicht eine Beispieladresse nennen, bei der das auftritt? Hast du es mit verschiedenen Servern versucht? |
Das tritt jedesmal auf, bei
https://entwickler-ecke.de/viewtopic.php?p=721850#721850, bei
https://de.wikipedia.org/wiki/, einfach bei jeder Adresse.
Da ich ehrlich gesagt das Ganze nicht wirklich verstehe, (sondern einfach froh war, dass es funktionierte :mrgreen: ), frage ich mich, was du mit "verschiedenen Servern" meinst. Die bereits genannten Einstellungen in TIdSSLIOHandlerSocketOpenSSL? Die Voreinstellung klappt nicht.
Moderiert von
Th69: Doppelposting entfernt.
jaenicke - Di 17.12.24 21:24
Kannst du bitte einmal eine solche Exe anhängen? Mich würde interessieren, ob es bei mir geht und nach welchen DLLs die sucht. Ich habe 10.1 leider nicht mehr parat.
galagher - Mi 18.12.24 16:14
jaenicke hat folgendes geschrieben : |
Kannst du bitte einmal eine solche Exe anhängen? Mich würde interessieren, ob es bei mir geht und nach welchen DLLs die sucht. Ich habe 10.1 leider nicht mehr parat. |
Kann ich leider nicht: Obwohl die EXE nur ca. 2,7 MB hat, bekomme ich vom Forum die Meldung:
Zitat: |
Der Dateianhang ist zu groß. Maximale Größe: 5MB |
Versuche jetzt, sie in einer zip-Datei zu senden, mal sehen...
galagher - Mi 18.12.24 16:21
Indy, sorry!
Ich benutze Indy10.
Th69 hat folgendes geschrieben : |
In der Delphi-PRAXiS gibt es auch ähnliche Themen dazu: |
Sehe ich mir gleich an!
//Edit: Leider nicht hilfreich!
galagher - Mi 18.12.24 16:26
zip-Datei im Anhang!
jaenicke - Mi 18.12.24 20:48
Die Exe lädt die korrekten DLLs, wenn ich sie bereitstelle, aber es geht dennoch nicht. Es kann daher nur daran liegen, was in den Komponenten eingestellt ist, oder an der Indyversion.
Ich bekomme das mit Delphi 10.4 nur, wenn ich den Standard (TLS 1.0) eingestellt lasse. So funktioniert es:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14:
| var Http: TIdHTTP; IndyOpenSsl: TIdSSLIOHandlerSocketOpenSSL; begin Http := TIdHTTP.Create(nil); try IndyOpenSsl := TIdSSLIOHandlerSocketOpenSSL.Create(Http); IndyOpenSsl.SSLOptions.SSLVersions := [sslvTLSv1_1, sslvTLSv1_2]; Http.IOHandler := IndyOpenSsl; ShowMessage(Http.Get(Edit1.Text)); finally Http.Free; end; end; |
Du hattest ja geschrieben, dass du das schon versucht hattest, aber ich glaube, dass da etwas nicht richtig war. Versuch es mal bitte so.
galagher - Mi 18.12.24 21:00
jaenicke hat folgendes geschrieben : |
Versuch es mal bitte so. |
Da erhalte ich den Fehler:
Zitat: |
Fehler beim Verbinden mit SSL.
error:140740BF:SSL routines:SSL23_CLIENT_HELLO:no protocols available. |
jaenicke - Mi 18.12.24 23:00
Ich hänge mal das komplette Projekt an.
galagher - Do 19.12.24 16:54
jaenicke hat folgendes geschrieben : |
Ich hänge mal das komplette Projekt an. |
Funktioniert, und funktioniert auch in meinem Programm mit TIdHTTP und TIdSSLIOHandlerSocketOpenSSL
mit den richtigen Einstellungen:
Delphi-Quelltext
1: 2:
| IdSSLIOHandlerSocketOpenSSL1.SSLOptions.SSLVersions := [sslvTLSv1_1, sslvTLSv1_2]; IdHTTP1.IOHandler := IdSSLIOHandlerSocketOpenSSL1; |
Bei
Get('https://de.wikipedia.org') erhalte ich die Meldung:
Zitat: |
HTTP/1.1 301 Moved Permanently |
Was hat denn das zu bedeuten? Genau damit hat es unter Windows7 noch funktioniert!
Get('https://de.wikipedia.org/wiki/Wikipedia:Hauptseite') hingegen klappt.
Weiters benötige ich tatsächlich beide dll's - unter Windows7 war das nicht so.
Jedenfalls bin ich einen Riesenschritt weiter!
jaenicke - Do 19.12.24 18:41
HTTP 301 ist eine Umleitung auf eine andere Adresse. Du kannst einfach HandleRedirects auf True setzen, damit Indy dieser Weiterleitung automatisch folgt.
Ich war nach dem Threadverlauf davon ausgegangen, dass du die Einstellungen schon getestet hattest, aber ohne Quelltext lässt sich das eben nicht prüfen. :wink:
galagher - Do 19.12.24 19:55
jaenicke hat folgendes geschrieben : |
Ich war nach dem Threadverlauf davon ausgegangen, dass du die Einstellungen schon getestet hattest, |
Möglicherweise habe ich das, aber ohne die dll's im Ordner zu haben. Oder ich hatte die dll's, aber die falschen Einstellungen. Ich habe alle möglichen Kombinationen getestet, alle erfolglos.
Jetzt klappt aber alles! Danke! :D
galagher - Fr 20.12.24 07:19
galagher hat folgendes geschrieben : |
Jetzt klappt aber alles! Danke! :D |
Bleibt noch die Frage: Wie sicher ist das eigentlich? :?
jaenicke - Fr 20.12.24 07:58
galagher hat folgendes geschrieben : |
galagher hat folgendes geschrieben : | Jetzt klappt aber alles! Danke! :D | Bleibt noch die Frage: Wie sicher ist das eigentlich? :? |
Du meinst, dass es weiterhin funktioniert?
So lange TLS 1.2 noch unterwegs ist, wird es auch funktionieren, denn die DLLs hast du ja nun bei der Exe statt irgendwo zufällig im System.
Wenn du zukunftssicher unterwegs sein möchtest, musst du
ICS [
https://wiki.overbyte.eu/wiki/index.php/ICS_Download] mit Unterstützung für neuere OpenSSL Versionen und TLS 1.3 nutzen.
galagher - Fr 20.12.24 08:18
jaenicke hat folgendes geschrieben : |
Du meinst, dass es weiterhin funktioniert? |
Nein, ich meine, wie gefahrlos bezüglich Viren, Trojaner & Co. das ist. Kann ich mir da eher was einfangen als zB. mit einem Browser? Öffne ich zB. Viren damit gewissermaßen eine Tür?
jaenicke - Fr 20.12.24 13:45
Lücken in OpenSSL oder Indy könnte ein böser Download natürlich ausnutzen, aber meistens zielen Angriffe eher auf Browser. Lücken, bei denen ein einfacher Download einer URL ohne Browser für einen Angriff genügt, sind selten.
Dagegen tun kannst du aber ohnehin nicht viel, außer indem du die OpenSSL-DLLs immer aktuell hältst. Mit ICS könntest du auch die aktuellste Version nutzen, nicht nur die alte mit den neuesten Sicherheitsupdates.
galagher - Fr 20.12.24 19:04
jaenicke hat folgendes geschrieben : |
Lücken in OpenSSL oder Indy könnte ein böser Download natürlich ausnutzen, |
Ich denke, für meine Zwecke - das Auslesen eines einzigen Satzes aus einem Text - wird Indy ausreichen. Downloads von Dateien etc. mache ich damit nicht.
Was ICS anlangt, habe mich da kurz informiert:
https://stackoverflow.com/questions/2663494/indy-or-ics-or Werde ich nicht brauchen, weil - siehe oben!
jaenicke - Fr 20.12.24 21:03
galagher hat folgendes geschrieben : |
jaenicke hat folgendes geschrieben : | Lücken in OpenSSL oder Indy könnte ein böser Download natürlich ausnutzen, | Ich denke, für meine Zwecke - das Auslesen eines einzigen Satzes aus einem Text - wird Indy ausreichen. Downloads von Dateien etc. mache ich damit nicht. |
Das
ist nichts anderes als eine Datei. Es ist im Original eine Textdatei, aber ein Angreifer kann da genauso gut unter der URL Schadcode ausliefern. So einfach ist das ganze dann doch nicht.
Aber wie gesagt:
Ich halte das Risiko für sehr überschaubar, da das kein typischer Angriffsvektor ist.
galagher - So 22.12.24 11:00
jaenicke hat folgendes geschrieben : |
Das ist nichts anderes als eine Datei. Es ist im Original eine Textdatei, aber ein Angreifer kann da genauso gut unter der URL Schadcode ausliefern. |
Wusst' ich's doch: Die Welt ist böse! :twisted:
jaenicke hat folgendes geschrieben : |
Ich halte das Risiko für sehr überschaubar, da das kein typischer Angriffsvektor ist. |
Das ja immerhin etwas ist beruhigend.
jaenicke - So 22.12.24 11:32
galagher hat folgendes geschrieben : |
Wusst' ich's doch: Die Welt ist böse! :twisted:
|
Wenn es um Computersicherheit geht, darfst du erst einmal niemandem trauen, bevor du dich nicht vergewissert hast, dass der Mitspieler (Server, Benutzer, ...) der ist, der es vorgibt zu sein. Das Prinzip nennt sich Zero Trust.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!