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
https-Request ohne externe SSL-Lib
-
- 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
Johannes
-
- Beiträge: 2118
- Registriert: Di 23. Sep 2014, 17:46
- OS, Lazarus, FPC: Win10 | Linux
- CPU-Target: x86_64
Re: https-Request ohne externe SSL-Lib
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 mitliefernGibt es eine Implementierung von SSL in Pascal die nutzbar ist?
-
- Beiträge: 463
- Registriert: Do 8. Jun 2017, 18:21
- OS, Lazarus, FPC: Windows 10 64bit, Lazarus 3.6, FPC 3.2.2
- CPU-Target: 64Bit
- Wohnort: Wien
Re: https-Request ohne externe SSL-Lib
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:
Ich bekomme die Fehlermeldung: could not initialize openSSL library.
Was muss man machen, damit das funktioniert?
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);
Was muss man machen, damit das funktioniert?
-
- Beiträge: 2118
- Registriert: Di 23. Sep 2014, 17:46
- OS, Lazarus, FPC: Win10 | Linux
- CPU-Target: x86_64
Re: https-Request ohne externe SSL-Lib
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.braunbär hat geschrieben: Fr 10. Jul 2020, 12:52 Ich hätte das auch gerne. Welcher sicherheitstechnische Grund spricht dagegen?
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
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
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/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?
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)
-
- Beiträge: 463
- Registriert: Do 8. Jun 2017, 18:21
- OS, Lazarus, FPC: Windows 10 64bit, Lazarus 3.6, FPC 3.2.2
- CPU-Target: 64Bit
- Wohnort: Wien
Re: https-Request ohne externe SSL-Lib
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.
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.
-
- Beiträge: 2118
- Registriert: Di 23. Sep 2014, 17:46
- OS, Lazarus, FPC: Win10 | Linux
- CPU-Target: x86_64
Re: https-Request ohne externe SSL-Lib
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)
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)
-
- Beiträge: 463
- Registriert: Do 8. Jun 2017, 18:21
- OS, Lazarus, FPC: Windows 10 64bit, Lazarus 3.6, FPC 3.2.2
- CPU-Target: 64Bit
- Wohnort: Wien
Re: https-Request ohne externe SSL-Lib
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.
.
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.
.