Statische OpenSSL-Verknüpfung in sgcWebSockets: keine libcrypto- und libssl-DLLs mehr | eSeGeCe Blog

Statische OpenSSL-Verknüpfung in sgcWebSockets: keine libcrypto- und libssl-DLLs mehr

· Komponenten

Der Einsatz von TLS mit sgcWebSockets unter Windows bedeutete bisher immer, libcrypto und libssl zusammen mit der ausführbaren Datei bereitzustellen, passend zur jeweiligen OpenSSL-Version und Bitness. sgcWebSockets kann OpenSSL jetzt stattdessen direkt in die ausführbare Datei einbinden, sodass keine DLL mehr bereitgestellt werden muss, keine Version mehr abgeglichen werden muss und kein Ordner mehr dafür vorgehalten werden muss. Verfügbar ist dies in den Editionen Enterprise und All-Access.

Eine Unit, sonst nichts zu konfigurieren

Es gibt keine Compiler-Direktiven zu aktivieren und keine OpenSSL-API-Version auszuwählen. Fügen Sie die Unit sgcIdSSLOpenSSL_Static zur uses-Klausel Ihres Projekts hinzu, und ab dem nächsten Lauf verwendet Ihre Anwendung die in die .exe eingebundene OpenSSL-Bibliothek, sowohl für Client- als auch für Server-Komponenten.

uses
  sgcWebSocket, sgcWebSocket_Classes,
  sgcIdSSLOpenSSL_Static;

Entfernen Sie die Unit aus der uses-Klausel, kehrt Ihre Anwendung wieder zum Laden der OpenSSL-DLLs wie zuvor zurück. Am restlichen Code, an Ihren TLS-Einstellungen, Zertifikaten und der Verbindungslogik ändert sich in beiden Fällen nichts.

Funktioniert in Clients und Servern, Win32 und Win64

Die statische Verknüpfung gilt gleichermaßen für TsgcWebSocketClient und TsgcWebSocketServer sowie für jede andere sgcWebSockets- oder sgcIndy-Komponente, die TLS nutzt, sowohl in 32-Bit- als auch in 64-Bit-Builds. Ein Server, der TLS für Hunderte Verbindungen terminiert, und ein Client, der einen einzelnen Endpunkt anwählt, nutzen das eingebundene OpenSSL auf die gleiche Weise, allein dadurch, dass die Unit im Projekt vorhanden ist.

OpenSSL 3.5.7, stets aktuell gehalten

Die aktuell eingebundene OpenSSL-Version ist 3.5.7. Sobald neue OpenSSL-Versionen erscheinen, wird dies in künftigen sgcWebSockets-Updates aktualisiert, sodass Sie OpenSSL-Binärdateien nicht selbst verfolgen, herunterladen oder erneut bereitstellen müssen, ein normales Komponenten-Update genügt.

Voraussetzungen

Wenn Sie mit einer Delphi-Version älter als XE2 kompilieren und die Unit dennoch referenzieren in der Erwartung, dass sie verknüpft wird, erhalten Sie E2045 Bad object file format. Die Lösung besteht einfach darin, sgcIdSSLOpenSSL_Static aus der uses-Klausel zu entfernen, Ihre Anwendung funktioniert dann weiterhin mit den OpenSSL-DLLs.

Wann das hilft

Die statische Verknüpfung ist nützlich, wenn Sie eine einzelne Datei ausliefern möchten, wenn Sie nicht sicherstellen können, dass auf dem Zielrechner bereits die richtige OpenSSL-DLL installiert ist, oder wenn Ihr Bereitstellungsprozess keine zusätzlichen Dateien neben der ausführbaren Datei zulässt, etwa bei einem abgeschotteten Installationsverzeichnis oder einem als einzelne Binärdatei ausgelieferten Tool.

Verfügbarkeit

Die statische OpenSSL-Verknüpfung ist in den Editionen Enterprise und All-Access von sgcWebSockets enthalten. Einen vollständigen Überblick über die TLS-Backends, die sgcWebSockets auf jeder Plattform unterstützt, finden Sie im Abschnitt SSL / TLS und auf der Seite OpenSSL-TLS-Backend.

Laden Sie es von der sgcWebSockets-Download-Seite herunter, oder holen Sie es über GetIt oder Ihr registriertes Konto.

Fragen, Feedback oder Hilfe bei der Planung einer DLL-freien Bereitstellung? Nehmen Sie Kontakt auf, Sie erhalten eine Antwort von den Leuten, die den Code geschrieben haben.