Een veilige Android-app uitleveren met Delphi of C++Builder betekende altijd één extra klus: libssl.so en libcrypto.so in de APK meeleveren zodat OpenSSL tijdens runtime aanwezig is. sgcWebSockets neemt die klus weg. Een nieuwe native TLS-backend, iohAndroidTLS, geeft de versleuteling aan Android zelf door, zodat je app via TLS verbindt zonder dat je OpenSSL-bibliotheken hoeft uit te rollen. Het is beschikbaar in de Enterprise-editie.
Onder de motorkap stuurt de backend de eigen javax.net.ssl.SSLEngine van het platform aan via JNI. Het besturingssysteem voert de handshake, de recordversleuteling en de certificaatvalidatie uit. sgcWebSockets voert alleen platte tekst in en krijgt versleutelde tekst terug, wat betekent dat de hele TLS-stack die is die Google met het besturingssysteem meelevert en patcht.
Eén regel om over te schakelen
De TLS-backend wordt geselecteerd via TLSOptions.IOHandler. Om de native TLS van Android te gebruiken, stel je hem in op iohAndroidTLS. Al het overige in je netwerkcode blijft hetzelfde.
uses
sgcWebSocket, sgcWebSocket_Types;
WSClient.TLS := True;
WSClient.TLSOptions.IOHandler := iohAndroidTLS;
WSClient.URL := 'wss://www.esegece.com:2053';
WSClient.Active := True;
Op andere platforms houd je de backend die past: iohOpenSSL werkt overal, en iohSChannel is de native optie op Windows waarvoor je niets hoeft uit te rollen. Een kleine voorwaarde houdt één enkele client-component correct op elk doelplatform.
WSClient.TLS := True;
{$IFDEF ANDROID}
WSClient.TLSOptions.IOHandler := iohAndroidTLS; // native, no OpenSSL .so
{$ELSE}
{$IFDEF MSWINDOWS}
WSClient.TLSOptions.IOHandler := iohSChannel; // native on Windows
{$ELSE}
WSClient.TLSOptions.IOHandler := iohOpenSSL; // OpenSSL elsewhere
{$ENDIF}
{$ENDIF}
WSClient.URL := 'wss://www.esegece.com:2053';
WSClient.Active := True;
Geen OpenSSL in de APK
Dit is het belangrijkste voordeel. Met de native backend bevat de APK geen libssl.so en geen libcrypto.so. Het pakket is kleiner, en je hoeft nooit meer achter een OpenSSL-versie aan te jagen, te herbouwen vanwege een security-advisory of een bibliotheekbuild op een toestel af te stemmen. De TLS-implementatie zit op het toestel en wordt door Android onderhouden, dus beveiligingsfixes komen binnen via systeemupdates in plaats van via je releasecyclus.
Het neemt ook een categorie uitrolproblemen weg. Er is geen "library not found", geen architectuurmismatch tussen de meegeleverde .so en het toestel, en geen tweede kopie van crypto om te auditen. Je stelt één property in en levert uit.
Een volwaardige TLS-client, geen uitgeklede
De native backend is een complete client. Hij valideert de server tegen de Android-systeem-truststore en voert hostnaamverificatie uit, zodat verbindingen met publieke certificaatautoriteiten zonder extra configuratie werken. Hij onderhandelt TLS 1.3 en ondersteunt ALPN op Android 10 (API 29) en later, waarmee je tijdens de handshake applicatieprotocollen zoals http/1.1 kunt adverteren.
Omdat hij achter dezelfde TLSOptions-API zit als elke andere backend, blijven de vertrouwde properties werken. VerifyCertificate zet peer-validatie aan of uit, RootCertFile vertrouwt een private autoriteit, CertFile en Password presenteren een clientcertificaat, en ALPNProtocols somt de protocollen op die onderhandeld moeten worden.
WSClient.TLS := True;
WSClient.TLSOptions.IOHandler := iohAndroidTLS;
WSClient.TLSOptions.VerifyCertificate := True;
WSClient.TLSOptions.ALPNProtocols.Add('http/1.1'); // Android 10 (API 29)+
WSClient.Host := 'your.server.com';
WSClient.Port := 443;
WSClient.Active := True;
Werkt met de componenten die je al gebruikt
De backend is aangesloten op de gedeelde TLSOptions, dus hij is niet beperkt tot de WebSocket-client. De TCP- en HTTP/2-clients en de andere componenten die TLSOptions blootstellen, selecteren hem op dezelfde manier. Als je code al TLSOptions instelt, is native Android-TLS toevoegen één enkele toewijzing, zonder wijziging aan de manier waarop je de verbinding opent, verzendt of ontvangt.
Hetzelfde idee op Apple
Als je ook iOS of macOS als doel hebt, doet de bijbehorende iohAppleTLS-backend daar hetzelfde werk: hij gebruikt de eigen TLS van Apple, zonder OpenSSL .dylib om uit te rollen, en bereikt TLS 1.3 via Network.framework. Het patroon is identiek, je kiest gewoon per platform de native handler. Je kunt de details lezen op de pagina Native Apple TLS.
Beschikbaarheid
Native Android-TLS (iohAndroidTLS) wordt geleverd in de Enterprise-editie van sgcWebSockets. Voor het volledige overzicht 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 Android TLS.
Download via de downloadpagina van sgcWebSockets, of haal het op via GetIt of je geregistreerde account.
Vragen, feedback of hulp bij het overzetten van een Android-app weg van OpenSSL? Neem contact op, je krijgt antwoord van de mensen die de code hebben geschreven.
