SSL- / TLS-Backends

sgcWebSockets liefert fünf austauschbare TLS-Transporte hinter einer einzigen Eigenschaft, TLSOptions.IOHandler. Wähle OpenSSL für maximale Portabilität, ein natives Plattform-Backend (Windows SChannel, Android, iOS/macOS), das den eigenen TLS-Stack des Betriebssystems nutzt, ohne OpenSSL-Bibliotheken ausliefern zu müssen, oder die Native-TLS-Engine, einen in Object Pascal geschriebenen TLS-1.3- und TLS-1.2-Stack, der auf keinem Ziel eine Abhängigkeit mitbringt und standardmäßig den Post-Quanten-Schlüsselaustausch X25519MLKEM768 aushandelt. Unter Windows lässt sich OpenSSL selbst zudem statisch in deine ausführbare Datei einbinden, sodass du bei OpenSSL bleiben kannst, ebenfalls ohne etwas ausliefern zu müssen. Der Wechsel des Backends ist eine einzige Codezeile, sonst ändert sich nichts.

Fünf TLS-Transporte, eine Eigenschaft

Jedes Backend hängt sich an dieselbe TLSOptions-API. Wähle das passende für deine Plattform und Auslieferung, und setze dann TLSOptions.IOHandler.

Backend-Vergleich

Plattformen, Auslieferungsaufwand, TLS-1.3-Unterstützung und Edition für jeden Transport.

Backend Plattformen Auszuliefernde Bibliothek TLS 1.3 Edition
OpenSSL Windows, Linux, macOS, iOS, Android libssl/libcrypto, oder unter Windows keine (statische Verknüpfung) Ja Alle Editionen
SChannel Windows Keine (in Windows integriert) Ja (Windows 11/Server 2022+) Professional, Enterprise
Android-TLS Android Keine (nutzt das Betriebssystem) Ja Enterprise
Apple-TLS iOS, macOS Keine (nutzt das Betriebssystem) Ja (10.14+/iOS 12+) Enterprise
Native TLS Windows, Linux, macOS, iOS, Android Keine (reines Object Pascal) Ja (und TLS 1.2) Standard, Professional, Enterprise, oder das sgcCrypto-Paket

Wähle ein Backend

Jeder Transport hat seine eigene Seite mit der vollständigen Einrichtung, Code für Delphi und C++ Builder, Hinweisen zur Auslieferung und Edition-Details.

OpenSSL (iohOpenSSL)

Plattformübergreifendes TLS über Indys Socket, verfügbar auf jeder Plattform, die sgcWebSockets unterstützt, und auf den meisten der Standard. Volles TLS 1.0 bis 1.3, die breiteste Cipher-Abdeckung, eigene CA, Client-Zertifikate und ALPN. Du lieferst die OpenSSL-Laufzeitbibliotheken mit deiner App aus. In jeder Edition enthalten. Unter Windows lässt es sich stattdessen auch statisch in die ausführbare Datei einbinden, ganz ohne etwas auszuliefern.

Vollständige Anleitung lesen →

SChannel (iohSChannel)

Microsofts nativer TLS-Stack (Secure Channel / SSPI), in Windows integriert. Keine Bibliotheksauslieferung, keine OpenSSL-DLLs zum Mitliefern oder Patchen, und er nutzt den Windows-Zertifikatspeicher. Nur Windows. In den Editionen Professional und Enterprise enthalten.

Vollständige Anleitung lesen →

Natives Android-TLS (iohAndroidTLS)

Android-natives TLS über die SSLEngine der Plattform via JNI. Keine OpenSSL-.so in deiner APK, Validierung gegen den Android-Systemvertrauensspeicher, TLS 1.3 und ALPN ab Android 10 (API 29). Enterprise-Edition.

Vollständige Anleitung lesen →

Natives Apple-TLS (iohAppleTLS)

Apple-natives TLS für iOS und macOS, ohne OpenSSL-.dylib zum Ausliefern. Es wählt auf macOS 10.14+ / iOS 12+ automatisch Network.framework (TLS 1.3) und fällt auf älteren Systemen auf Secure Transport (TLS 1.2) zurück, mit Systemvertrauen, SNI, eigener CA, Client-Zertifikat / mTLS und ALPN. Enterprise-Edition.

Vollständige Anleitung lesen →

Native TLS (iohNativeTLS)

Eine vollständig in Object Pascal auf den sgcCrypto-Units geschriebene TLS-1.3- und TLS-1.2-Implementierung, die daher überhaupt nichts ausliefert, ob unter Windows, Linux, macOS, iOS oder Android. Setze TLSOptions.IOHandler := iohNativeTLS an einem Client oder SSLOptions.IOHandler := iohNativeTLS an einem Server, die IOCP- und EPOLL-Server-Engines eingeschlossen. TLSOptions.NativeTLS_Options.Groups und TLSOptions.NativeTLS_Options.CipherSuites nehmen durch Doppelpunkte getrennte Listen im OpenSSL-Stil. Ihre Standardwerte sind X25519MLKEM768:X25519:secp256r1:secp384r1 und TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256:TLS_AES_128_GCM_SHA256 zuzüglich der TLS-1.2-Standardwerte, sodass ein Handshake gegen einen Peer, der ihn unterstützt, ohne jede Konfiguration Post-Quanten-hybrid ist.

TLS 1.3 und TLS 1.2. TLSOptions.Version an einem Client und SSLOptions.Version an einem Server ist die niedrigste zulässige Version: tls1_2 oder tlsUndefined handelt TLS 1.3 oder TLS 1.2 aus, und tls1_3 lässt nur TLS 1.3 zu. Für ausschließlich TLS 1.2 gib nur TLS-1.2-Suiten in NativeTLS_Options.CipherSuites an. TLS 1.2 bietet standardmäßig ECDHE_ECDSA und ECDHE_RSA mit AES-128-GCM, AES-256-GCM und ChaCha20-Poly1305, während die ECDHE-AES-CBC-Suiten und der RSA-Schlüsselaustausch nur zur Verfügung stehen, wenn du sie namentlich angibst. Es verwendet X25519, secp256r1 oder secp384r1, da die hybriden Post-Quanten-Gruppen ausschließlich in TLS 1.3 existieren. TLS 1.2 bringt das Extended Master Secret nach RFC 7627 und den beidseitigen Downgrade-Schutz nach RFC 8446 mit und verweigert Renegotiation sowie SHA-1-Signaturen.

Was sie nicht kann. Die Engine spricht ausschließlich TLS 1.3 und TLS 1.2, ohne TLS 1.1, TLS 1.0 oder SSL. Es gibt keine Session-Resumption und kein PSK, kein 0-RTT und kein QUIC. Die vertrauenswürdigen Roots kommen aus TLSOptions.RootCertFile, zuzüglich der Roots, denen das Betriebssystem vertraut, wenn NativeTLS_Options.UseSystemRoots auf True steht, gelesen aus dem Windows-ROOT-Speicher oder einer CA-Bundle-Datei und nie aus dem macOS- oder iOS-Schlüsselbund oder dem Android-Speicher, und das Komponentenereignis OnSSLVerifyPeer steht für sie nicht zur Verfügung, die Engine hat ihre eigenen Verifikations-Hooks. Bleib bei OpenSSL oder einem Plattform-Backend, wenn du etwas davon brauchst.

Sie ist Teil von sgcCrypto, wird also ab der Standard-Edition und im eigenständigen sgcCrypto-Paket ausgeliefert.

Edition-Hinweis

Natives Plattform-TLS, Android (iohAndroidTLS) und Apple (iohAppleTLS), erfordert die Enterprise-Edition. OpenSSL (iohOpenSSL) ist in jeder Edition enthalten; SChannel (iohSChannel) ist in den Editionen Professional und Enterprise enthalten. Die statische Verknüpfung von OpenSSL unter Windows erfordert ebenfalls Enterprise oder All-Access. Native TLS (iohNativeTLS) ist Teil von sgcCrypto und wird daher ab der Standard-Edition sowie im eigenständigen sgcCrypto-Paket ausgeliefert.

Mit einer Zeile wechseln

Alle fünf Backends teilen sich dieselbe TLSOptions-API, sodass der Wechsel zwischen ihnen eine einzige Eigenschaftsänderung ist. Sonst muss sich nichts in deinem Code ändern.

TLS & VerifyCertificate

Aktiviere TLS und schalte die Peer-Zertifikatsprüfung auf jedem Backend auf dieselbe Weise um.

RootCertFile

Zeige auf eine eigene CA-Root, um einer privaten oder selbstsignierten Zertifizierungsstelle zu vertrauen.

CertFile & Password

Gib ein Client-Zertifikat und sein Passwort für die wechselseitige TLS-Authentifizierung (mTLS) an.

ALPNProtocols

Kündige Anwendungsprotokolle (zum Beispiel http/1.1) während des TLS-Handshakes an.

// Dieselben TLSOptions, nur die IOHandler-Zeile ändert sich je Plattform.
WSClient.TLS := True;
WSClient.TLSOptions.IOHandler := iohOpenSSL;   // or iohSChannel / iohAndroidTLS / iohAppleTLS / iohNativeTLS
WSClient.TLSOptions.VerifyCertificate := True;
WSClient.TLSOptions.RootCertFile := '';
WSClient.TLSOptions.CertFile := '';
WSClient.TLSOptions.Password := '';
WSClient.TLSOptions.ALPNProtocols.Add('http/1.1');
WSClient.Active := True;
// Dieselben TLSOptions, nur die IOHandler-Zeile ändert sich je Plattform.
WSClient->TLS = true;
WSClient->TLSOptions->IOHandler = iohOpenSSL;   // or iohSChannel / iohAndroidTLS / iohAppleTLS / iohNativeTLS
WSClient->TLSOptions->VerifyCertificate = true;
WSClient->TLSOptions->RootCertFile = "";
WSClient->TLSOptions->CertFile = "";
WSClient->TLSOptions->Password = "";
WSClient->TLSOptions->ALPNProtocols->Add("http/1.1");
WSClient->Active = true;
Bestes Preis-Leistungs-Verhältnis: All-AccessAlle eSeGeCe-Produkte, inklusive Premium-Support, ab €1,059 pro Jahr.
All-Access-Preise ansehen

Natives TLS, kein OpenSSL zum Ausliefern

Lade die kostenlose Testversion herunter und wechsle TLS-Backends mit einer einzigen Codezeile.