https-Request ohne externe SSL-Lib

Alle Fragen zur Netzwerkkommunikation
Antworten
monta
Lazarusforum e. V.
Beiträge: 2809
Registriert: Sa 9. Sep 2006, 18:05
OS, Lazarus, FPC: Linux (L trunk FPC trunk)
CPU-Target: 64Bit
Wohnort: Dresden
Kontaktdaten:

https-Request ohne externe SSL-Lib

Beitrag von monta »

Hallo,

kennt jemand von Euch eine Möglichkeit, mit Freepascal einen https-Request abzusetzen, ohne eine externe SSL-Bibliothek wie Openssl einbinden zu müssen?

Mit Synapse und anderen Bibliotheken sind die Requests ja kein Problem, aber es wird immer eine entsprechende Bibliothek benötigt. Gibt es eine Implementierung von SSL in Pascal die nutzbar ist?

Grüße
monta
Johannes

Warf
Beiträge: 1908
Registriert: Di 23. Sep 2014, 17:46
OS, Lazarus, FPC: Win10 | Linux
CPU-Target: x86_64

Re: https-Request ohne externe SSL-Lib

Beitrag von Warf »

Gibt es eine Implementierung von SSL in Pascal die nutzbar ist?

Aus sicherheitstechnischen gründen willst du das eigentlich nicht haben. Du kannst aber einfach eine statische version der LibSSL gegenlinken, dann musst du keine separate bibliothek mitliefern

braunbär
Beiträge: 369
Registriert: Do 8. Jun 2017, 18:21
OS, Lazarus, FPC: Windows 10 64bit, Lazarus 2.0.10, FPC 3.2.0
CPU-Target: 64Bit
Wohnort: Wien

Re: https-Request ohne externe SSL-Lib

Beitrag von braunbär »

Ich hätte das auch gerne. Welcher sicherheitstechnische Grund spricht dagegen?
Und was ist eine "statische" Version der LibSSL?

Ich versuche gerade, eine ganz simple https-Anfrage zu machen, irgendetwas klappt da nicht, offenbar braucht https irgend etwas zusätzlich.
ich habe etwas im Internet recherchiert, und bin auf den Code (von mir angepasst) gestoßen:

Code: Alles auswählen

  
  s:=TFPHttpClient.SimpleGet('https://myip.is/');
  Memo1.Lines.Add(s);
Ich bekomme die Fehlermeldung: could not initialize openSSL library.

Was muss man machen, damit das funktioniert?

Warf
Beiträge: 1908
Registriert: Di 23. Sep 2014, 17:46
OS, Lazarus, FPC: Win10 | Linux
CPU-Target: x86_64

Re: https-Request ohne externe SSL-Lib

Beitrag von Warf »

braunbär hat geschrieben:
Fr 10. Jul 2020, 12:52
Ich hätte das auch gerne. Welcher sicherheitstechnische Grund spricht dagegen?
Ganz einfach, eine SSL bibliothek muss so fehlerfrei wie möglich sein, und das geht nur durch testen, testen, testen. Die OpenSSL wird von millionen Entwicklern genutzt und hat fast 500 contributors, viele davon absolute spezialisten auf dem gebiet, und selbst da tauchen so fehler wie Heartbleed auf.

Es würde an ein wunder grenzen, wenn eine Bibliothek die von nur ein paar leuten geschrieben und benutzt wird, die womöglich mit IT-Sec nicht so sehr viel am Hut haben (denn so groß ist die Pascal Nutzerbasis nunmal nicht) auch nur im ansatz die qualität erreichen würde die z.b. die OpenSSL hat.

Als Beispiel, ein nicht sicherer random seed kann dazu führen das die gesammte verschlüsselung geknackt werden kann (wenn auch nur probabilisitisch) und jemand von außerhalb all die übertragenen daten sehen kann.

Oder, wenn deine Lib einen bug hat durch den die SSL zertifikatsprüfung geskipped werden, könnte sich jeder server einfach für dein zielserver ausgeben (z.b. über DNS poisoning) und als man in the middle alle daten abfangen.

Jede programmierer produziert bugs, die meisten bugs sind kein problem, bei einer Sicherheitstechnischen implementation wie einer SSL lib, kann ein auch nur ganz kleiner bug schon das ganze SSL konzept hinfällig machen. Eine kaputte SSL lib bringt nicht mehr als gar keine SSL lib
braunbär hat geschrieben:
Fr 10. Jul 2020, 12:52
Und was ist eine "statische" Version der LibSSL?
Es gibt dynamische und statische bibliotheken. Dynamische Bibliotheken müssen auf dem zielrechner vorhanden sein, unter windows als .dll datei, unter linux als .so datei. Eine statische bibliothek hingegen wird in die anwendung rein gelinkt, wird also zum teil der ausgelieferten Executable. Wenn man die OpenSSL vom source selbst baut (zumindest unter linux) kann man die makefiles so konfigurieren das eine statische lib rausfällt

Statische bibliotheken sind (auch grade was SSL angeht) auch nicht die beste option, denn bugfixes in der lib benötigen ein rekompilieren des gesammten Programmes, während dynamische bibliotheken können separat upgedated werden.

Wenn du als Anwendungsentwickler also eine statische SSL lib verwendest, musst du immer wen es hotfixes und patches in der SSL implementierung gab, dein programm neu bauen, und die neue version an all deine Kunden ausliefern, das heist du musst praktisch jeden tag die changelogs für die SSL implementierung lesen (denn jede sekunde zählt bei security kram)

Bei einer dynamischen bibliothek muss einfach nur die DLL geupdated werden, das kann voll automatisch gemacht werden, ohne das der nutzer das überhaupt bemerkt

braunbär hat geschrieben:
Fr 10. Jul 2020, 12:52
Ich bekomme die Fehlermeldung: could not initialize openSSL library.

Was muss man machen, damit das funktioniert?
Ich geh mal davon aus das du Windows benutzt, den die meisten Linux distros (und ich glaub MacOS auch) liefern bereits die OpenSSL mit. Unter windows ist das nicht der Fall (in aktuellen windows 10 versionen sollten sie mitgeliefert werden, die liefern mittlerweile ja auch die OpenSSH mit), da musst du einfach die entsprechende DLL in das programmverzeichnis legen. Die findest du hier (vom indy project): https://indy.fulgan.com/SSL/

Du kannst dein program sogar so bauen das es automatisch bei programmstart die neuste version runterlädt. Mein tipp ist aber, benutz einfach ne aktuelle windows 10 version, die hält eine akutelle OpenSSL lib vor die über den windows updater geupdatet wird (Windows 7 ist eh tot und windows 8 ist ziemlich kacke)

braunbär
Beiträge: 369
Registriert: Do 8. Jun 2017, 18:21
OS, Lazarus, FPC: Windows 10 64bit, Lazarus 2.0.10, FPC 3.2.0
CPU-Target: 64Bit
Wohnort: Wien

Re: https-Request ohne externe SSL-Lib

Beitrag von braunbär »

Ich arbeite mit Win 10, theoretisch sollte SLL da installiert sein.
Ich verstehe nicht ganz was das Problem ist. Ich habe die DLLs jetzt nochmal von der Quelle, die du angegeben hast, heruntergeladen und in mein Projektverzeichnis kopiert (hatte vorher schon etwas ältere versionen in meinem Projektverzeichnis).
Trotzdem funktioniert es nicht. Habe im Debugger verfolgt, was da passiert, das Loadlib in loadlibraries (in openssl.pas) lädt die dlls einfach nicht, SSLUtilHandle und SSLLibHandle bleiben nach dem Aufruf von loadlib =0.
Die beiden Dateien befinden sich, wie gesagt, im Projektverzeichnis, und die an loadlib übergebenen Dateinamen stimmen.

Warf
Beiträge: 1908
Registriert: Di 23. Sep 2014, 17:46
OS, Lazarus, FPC: Win10 | Linux
CPU-Target: x86_64

Re: https-Request ohne externe SSL-Lib

Beitrag von Warf »

Hast du dir auch die richtige version runtergeladen?
Gibt ja einmal die x86_64 (64 bit) und einmal die i386 (32 bit) version. Die bitness der lib muss mit der der anwendung übereinstimmen. Kann auch sein das windows 10 nur die 64 bit mitliefert, oder das deine windows version nicht ganz up to date ist (letztes herbstupdate oder so kam die OpenSSL rein, das wird aber soweit ich weiß nicht automatisch installiert)

braunbär
Beiträge: 369
Registriert: Do 8. Jun 2017, 18:21
OS, Lazarus, FPC: Windows 10 64bit, Lazarus 2.0.10, FPC 3.2.0
CPU-Target: 64Bit
Wohnort: Wien

Re: https-Request ohne externe SSL-Lib

Beitrag von braunbär »

Danke, das wars.
Ich habe mir eingebildet, mein Lazarus/FPC würde noch 32-Bit Code produzieren, das ist aber offenbar nicht der Fall. Mit den 64-Bit DLLs klappt es.
.

Antworten