TLS leveren in een iOS- of macOS-app gebouwd met Delphi of C++Builder betekende vroeger OpenSSL meebundelen: een libssl.dylib en een libcrypto.dylib verpakt bij de app, door jou versie-afgestemd en gepatcht. sgcWebSockets schrapt die eis. Een nieuwe native TLS-backend, iohAppleTLS, gebruikt Apple's eigen TLS, zodat je app veilig verbindt zonder een OpenSSL .dylib om uit te rollen. Het is beschikbaar in de Enterprise-editie.
Nog beter: op moderne systemen krijg je TLS 1.3. De backend kiest automatisch de beste systeem-API voor het apparaat, allemaal achter één instelling, dus je hoeft niet te vertakken op OS-versie en je code blijft overal hetzelfde.
Eén regel om te schakelen
De TLS-backend wordt geselecteerd via TLSOptions.IOHandler. Om Apple's native TLS te gebruiken, stel je hem in op iohAppleTLS. De rest van je netwerkcode verandert niet.
uses
sgcWebSocket, sgcWebSocket_Types;
WSClient.TLS := True;
WSClient.TLSOptions.IOHandler := iohAppleTLS;
WSClient.URL := 'wss://www.esegece.com:2053';
WSClient.Active := True;
Op andere platforms behoud je de backend die past: iohOpenSSL werkt overal, iohSChannel is native op Windows en iohAndroidTLS is de native optie zonder uitrol op Android. Een kleine conditie houdt één clientcomponent correct op elk doelplatform.
WSClient.TLS := True;
{$IF Defined(IOS) or Defined(MACOS)}
WSClient.TLSOptions.IOHandler := iohAppleTLS; // native, no OpenSSL .dylib
{$ELSEIF Defined(ANDROID)}
WSClient.TLSOptions.IOHandler := iohAndroidTLS; // native, no OpenSSL .so
{$ELSEIF Defined(MSWINDOWS)}
WSClient.TLSOptions.IOHandler := iohSChannel; // native on Windows
{$ELSE}
WSClient.TLSOptions.IOHandler := iohOpenSSL; // OpenSSL elsewhere
{$ENDIF}
WSClient.URL := 'wss://www.esegece.com:2053';
WSClient.Active := True;
Geen OpenSSL .dylib om uit te rollen
Met de native backend is er geen OpenSSL om te bundelen, versie-af te stemmen of te patchen. De TLS-stack wordt met het besturingssysteem meegeleverd, dus de app is slanker en vrij van een crypto-afhankelijkheid van derden. Voor App Store-inzendingen betekent dit ook één native bibliotheek minder om te verantwoorden, en je TLS-beleid volgt dat van Apple in plaats van een library-build die je maanden geleden bevroor. Beveiligingsfixes komen binnen via OS-updates.
TLS 1.3 met automatische terugval
De enkele instelling iohAppleTLS kiest de juiste systeem-API per apparaat. Op macOS 10.14+ en iOS 12+ gebruikt het Network.framework, dat TLS 1.3 brengt. Op oudere systemen valt het terug op Secure Transport, dat maximaal TLS 1.2 haalt. Je schrijft geen versiecontroles, de backend kiest het pad en je code is op beide identiek.
Een volledige TLS-client
Dit is een volledige client, geen uitgeklede. Hij gebruikt de system trust store, voert SNI- en hostnaamverificatie uit, en stelt een OnAppleTLSVerifyPeer-callback beschikbaar zodat je het certificaat zelf kunt inspecteren en accepteren of weigeren. Je kunt een private autoriteit vertrouwen met een eigen CA-root via RootCertFile, een clientcertificaat presenteren voor mutual TLS met CertFile en Password, en applicatieprotocollen zoals http/1.1 adverteren via ALPN.
WSClient.TLS := True;
WSClient.TLSOptions.IOHandler := iohAppleTLS;
WSClient.TLSOptions.VerifyCertificate := True;
WSClient.TLSOptions.ALPNProtocols.Add('http/1.1');
WSClient.TLSOptions.RootCertFile := ''; // optional custom CA (PEM/DER)
WSClient.TLSOptions.CertFile := ''; // optional client cert (PKCS#12) for mTLS
WSClient.TLSOptions.Password := ''; // client cert password
WSClient.OnAppleTLSVerifyPeer := DoVerifyPeer; // optional custom validation
WSClient.Host := 'your.server.com';
WSClient.Port := 443;
WSClient.Active := True;
De verify-peer-callback geeft je het certificaatsubject en de SHA-256-vingerafdruk ervan, het resultaat van de trust-evaluatie, en een Accept-vlag die je instelt om de verbinding toe te staan of te blokkeren. Het is de natuurlijke plek om een certificaat te pinnen of je eigen beleid bovenop de system trust-beslissing toe te passen.
Werkt met de componenten die je al gebruikt
De backend zit achter de gedeelde TLSOptions, dus hij is niet beperkt tot de WebSocket-client. De TCP- en HTTP/2-clients en de andere componenten die TLSOptions beschikbaar stellen, selecteren hem op dezelfde manier. Als je code TLSOptions al configureert, is het inschakelen van native Apple TLS één toewijzing, zonder verandering in hoe je verbindt of data uitwisselt.
Hetzelfde idee op Android
Als je ook Android als doel hebt, doet de begeleidende iohAndroidTLS-backend daar hetzelfde werk: hij gebruikt Android's eigen TLS via de platform-SSLEngine, zonder een OpenSSL .so om uit te rollen. Het patroon is identiek, je kiest de native handler per platform. De details staan op de pagina Native Android TLS.
Beschikbaarheid
Native Apple TLS (iohAppleTLS) wordt geleverd in de Enterprise-editie van sgcWebSockets. Voor de volledige uitsplitsing van de vier TLS-backends, OpenSSL op elk platform, SChannel op Windows, en de native Android- en Apple-handlers, zie de SSL / TLS-sectie en de pagina Native Apple TLS.
Download het van de sgcWebSockets-downloadpagina, of haal het binnen via GetIt of je geregistreerde account.
Vragen, feedback of hulp bij het verhuizen van een iOS- of macOS-app weg van OpenSSL? Neem contact op, je krijgt antwoord van de mensen die de code hebben geschreven.
