Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Problem mit OpenSSL: liefert Connection Error (https://www.delphipraxis.net/199747-problem-mit-openssl-liefert-connection-error.html)

subria813 16. Feb 2019 19:11

Problem mit OpenSSL: liefert Connection Error
 
Hallo,
ich benutze für ein Programmsystem Delphi5 mit Indy9. Ich weiß, etwas ältlich, aber es funktioniert eigentlich. Mit dem Programm verbinde ich mich mit dem Internet, d.h. per HTTP.GET und OpenSSL verbinde ich mich zu einem Server. Nun gibt es zwei Server - einen für Produktion und einen für Test - die gleich aufgesetzt sind bzw. sein sollen. Auf beiden Servern sind die SSL-Zertifikate installiert. Wenn ich die Verbindung zum produktiven Server aufbaue, dann klappt das mit den entsprechenden Credentials mit dem Download von Daten einwandfrei. Bei dem Versuch, die gleiche Aktion mit den gleichen Credentials zum Testsystem auszuführen, bekomme ich immer einen SSL Connection Error geliefert. Der Code in beiden Fällen ist bei mir immer identisch, die Credentials ebenfalls. Mit den Credentials kann ich mich "manuell" bei dem Server anmelden, d.h. der Server läuft und ich bin als User dort bekannt. Ich habe keine Idee mehr, woran das liegen könnte. Im Debug-Mode durch die Indy-Resourcen komme ich leider auch nicht weiter. Es wäre prima, wenn jemand eine Idee hätte, wo der Fehler liegt. Danke.

Codehunter 16. Feb 2019 20:58

AW: Problem mit OpenSSL: liefert Connection Error
 
Möglicherweise liefert der eine Server noch ältere bzw. andere Verschlüsselung und Stromchriffren. Indy 9 kann glaube ich gar nicht mit dem aktuellen OpenSSL und TLS 1.2 umgehen. Bin mir aber nicht sicher, weil schon vor ca. 10 Jahren auf Indy 10 umgestiegen. Am besten schaust du dir den Verbindungsaufbau mal mit Wireshark an. Da kannst du am schnellsten feststellen wo es klemmt. Teilweise wirft Wireshark Verbindungsfehler sogar als rote Einträge aus.

Für Indy 10 habe ich mir mal eine Prozedur geschrieben, welche die Secrets in eine Datei ausleitet, sodass man den verschlüsselten Datenstrom mit Wireshark entschlüsseln kann. Vielleicht lässt sich das auch für Indy 9 adaptieren. Allerdings wird dein Problem schon auftreten bevor überhaupt eine Verschlüsselung ausgehandelt wurde.

https://www.delphipraxis.net/198231-...erstellen.html

mjustin 17. Feb 2019 09:18

AW: Problem mit OpenSSL: liefert Connection Error
 
Wenn das Programm überschaubar ist (nur HTTP GET), wäre eine Umstellung auf Indy 10 erwägenswert (Indy 10 läuft auch mit Delphi 5).

Codehunter 17. Feb 2019 10:41

AW: Problem mit OpenSSL: liefert Connection Error
 
Zumal die Entwickler intern wohl schon an Indy 11 arbeiten... In den allermeisten Fällen ist Indy 9 schnell gegen Indy 10 ausgetauscht, weil die Komponenten und deren Members entweder gleich oder zumindest sehr ähnlich sind. Ein Fallstrick könnte Unicode werden, das war bei D5 noch nicht so vorgesehen wie es heute ist.

Zumindest wenn es um die weitere Entwicklung in puncto TLS/SSL geht, stößt man absehbar mit Indy 9 an Grenzen. Denn TLS 1.3 wird kommen, OpenSSL 1.2 wird kommen und beides wird es für Indy 9 nicht geben. Daher wäre eine Migration auf Indy 10 keine schlechte Investition in die Zukunft. Dabei am besten gleich noch eine Abstraktion dazwischen bauen, dann ist der Wechsel von Indy 10 auf Indy 11 dann weniger aufwendig und wird nicht mehr so lang aufgeschoben ;-)

subria813 17. Feb 2019 17:23

AW: Problem mit OpenSSL: liefert Connection Error
 
Vielen Dank für die Tipps.

Wireshark hatte ich mir schon herunter geladen, um damit die Sache demnächst anzugehen. Mal sehen, wie einfach/kompliziert das ist.

Ich weiß, dass Indy 9 nur bis TLSv1 unterstützt. Deswegen habe ich eine Änderung auf Indy 10 schon in Erwägung gezogen. Nur kann ich nicht abschätzen, wieviel Arbeit die Umprogrammierung bedeutet. Ist eine Änderung auf Unicode notwendig?

Ich hatte mir schon vor einiger Zeit Embarcadero RAD Studio XE7 zugelegt und wollte das Ganze migrieren. Nur dann gilt in jedem Fall Unicode für die Stringverarbeitung. Da mein Programm sehr viel mit Strings hantiert, habe ich die Konvertierung bislang gescheut - auch aus Zeitgründen.

mjustin 17. Feb 2019 18:44

AW: Problem mit OpenSSL: liefert Connection Error
 
Zitat:

Zitat von subria813 (Beitrag 1425811)
Ich weiß, dass Indy 9 nur bis TLSv1 unterstützt. Deswegen habe ich eine Änderung auf Indy 10 schon in Erwägung gezogen. Nur kann ich nicht abschätzen, wieviel Arbeit die Umprogrammierung bedeutet. Ist eine Änderung auf Unicode notwendig?

Nein, Indy 10 arbeitet auf Compilern vor Delphi 2009 weiterhin mit AnsiString.

subria813 17. Feb 2019 20:48

AW: Problem mit OpenSSL: liefert Connection Error
 
Danke für den Hinweis. Das ist doch schon mal eine gute Nachricht.

Codehunter 18. Feb 2019 07:23

AW: Problem mit OpenSSL: liefert Connection Error
 
Wegen Unicode würde ich mir jetzt erstmal nicht so große Gedanken machen. In vielen Fällen hat man auch bei D2009 ältere Projekte ohne Änderungen weiterführen können. Knifflig wurde es meistens wenn man mit PChars gearbeitet hat und Win32-Funktionen nutzt. Da wurden vor D2009 die Ansi-Varianten genutzt und danach die Widechar-Varianten.

Lade dir einfach mal die Community Edition runter und teste dein Projekt damit. Indy 10 ist da von Haus aus schon installiert. Jetzt noch auf ein XE7 migrieren macht wenig Sinn, dann lieber ein Upgrade auf die Subscription in Erwägung ziehen.

subria813 18. Feb 2019 17:17

AW: Problem mit OpenSSL: liefert Connection Error
 
Okay, habe ich verstanden. Es liegt trotzdem etwas Arbeit vor mir. Danke für die Hilfe.

MichaelT 19. Feb 2019 10:04

AW: Problem mit OpenSSL: liefert Connection Error
 
Du brauchst auf jeden Fall eine gepatchte Version von Indy 9.

Es ist schon so lange her. Ich hatte mal Troubles (Version die bei D7 mitkam) bspw. mit einem Array das zu klein dimensioniert war.


Zitat:

Zitat von subria813 (Beitrag 1425747)
Hallo,
ich benutze für ein Programmsystem Delphi5 mit Indy9.


hoika 19. Feb 2019 10:19

AW: Problem mit OpenSSL: liefert Connection Error
 
Hallo,
Zitat:

Nur dann gilt in jedem Fall Unicode für die Stringverarbeitung. Da mein Programm sehr viel mit Strings hantiert, habe ich die Konvertierung bislang gescheut - auch aus Zeitgründen.
Hier kann ich dir nur raten, baue dir Unittests (z.B. mit DUnit oder DUnitX).
Die läßt du sowohl mit dem alten Delphi als auch mit dem neuen Delphi laufen.

subria813 20. Feb 2019 10:55

AW: Problem mit OpenSSL: liefert Connection Error
 
Was soll "gepatchte Version" heißen? Ich benutze Indy 9.0.17 schon eine geraume Weile und habe bislang keine Probleme gehabt. Im Moment besteht halt das Problem, dass ich mit dem gleichen Code an beide Server gehe (http), bei dem einen funktionieren alle Requests, bei dem anderen nicht. Ich arbeite daran.

Delphi.Narium 20. Feb 2019 11:07

AW: Problem mit OpenSSL: liefert Connection Error
 
Gepatchte Version heißt: Eine ältere Version, die eigentlich nicht mehr unterstützt wird, wurde dahingehend ergänzt, dass sie auch mit aktuellem OpenSSL zurechtkommen.

Ohne diese Version wirst Du eventuell nicht zu einem Ergebnis kommen, da heutige Server Funktionalitäten nutzen, die es zu Zeiten von Indy 9 noch nicht gab und daher in der von Dir genutzten Version von Indy 9 auch nicht vorhanden sind?

Sprich: Ohne Nutzung des Patches oder einen Versionswechsel der Indys wirst Du (wenn Du Pech hast - und danach sieht es irgendwie aus) nicht weiterkommen.

MichaelT 20. Feb 2019 14:11

AW: Problem mit OpenSSL: liefert Connection Error
 
Gemeint war der letzte Stand von Indy 9. Das passt schon.

Was sagt denn Open SSL wenn du mit dem s_client draufgehst. openssl s_client ... Gibt es einen Unterschied?

Ansonsten wäre die Fehlermeldung interessant.

Zitat:

Zitat von subria813 (Beitrag 1426083)
Was soll "gepatchte Version" heißen? Ich benutze Indy 9.0.17 schon eine geraume Weile und habe bislang keine Probleme gehabt. Im Moment besteht halt das Problem, dass ich mit dem gleichen Code an beide Server gehe (http), bei dem einen funktionieren alle Requests, bei dem anderen nicht. Ich arbeite daran.


subria813 21. Feb 2019 20:44

AW: Problem mit OpenSSL: liefert Connection Error
 
Wenn ich mit Openssl s_client auf die Server gehe, dann gibt es keinen Unterschied bei den jeweiligen Rückmeldungen. Hmm?

Ich habe jetzt auch über Wireshark den Netzwerk-Traffic angeschaut. Bei dem produktiven Server läuft es durch mit den ganzen SSL Frames. Beim Testserver gibt es nur einen Frame für SSL mit "Client Hello" und es kommt nur eine TCP Antwort vom Server, die mir nichts sagt.

subria813 22. Feb 2019 15:33

AW: Problem mit OpenSSL: liefert Connection Error
 
Ich denke, dass ich den "Fehler" gefunden habe.

Über OpenSSL s_client hatte ich nur -connect incl Port eingegeben. Bei den beiden Zugriffen auf die Server konnte ich sehen, dass unterschiedliche Zertifikate angezogen wurden. Wenn ich den Parameter -servername zusätzlich angebe, dann wird in beiden Fällen das gleiche(!) Zertifikat ausgegeben.

Leider unterstützt Indy 9 nicht die Angabe eines Servernamem(kein SNI Support). Ich habe in den Quellen von Indy 9 auch nichts in der Richtung entdecken können. Inwieweit das in Indy 10 implementiert ist, habe ich nicht final herausfinden können (Internet). Ich werde mal einen Versuch mit der Community Edition starten - wenn ich die Zeit dazu finde.


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:07 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz