Distribuire un'app Android sicura con Delphi o C++Builder ha sempre comportato un'incombenza in più: includere libssl.so e libcrypto.so nell'APK affinché OpenSSL sia presente in fase di esecuzione. sgcWebSockets elimina questa incombenza. Un nuovo backend TLS nativo, iohAndroidTLS, affida la cifratura ad Android stesso, così la tua app si connette via TLS senza alcuna libreria OpenSSL da distribuire. È disponibile nell'edizione Enterprise.
Internamente il backend pilota il javax.net.ssl.SSLEngine della piattaforma tramite JNI. Il sistema operativo esegue l'handshake, la cifratura dei record e la validazione del certificato. sgcWebSockets si limita a passare il testo in chiaro in ingresso e a ricevere il testo cifrato in uscita, il che significa che l'intero stack TLS è quello che Google distribuisce e aggiorna insieme al sistema operativo.
Una sola riga per passare
Il backend TLS si seleziona tramite TLSOptions.IOHandler. Per usare il TLS nativo di Android, impostalo su iohAndroidTLS. Tutto il resto del tuo codice di rete rimane invariato.
uses
sgcWebSocket, sgcWebSocket_Types;
WSClient.TLS := True;
WSClient.TLSOptions.IOHandler := iohAndroidTLS;
WSClient.URL := 'wss://www.esegece.com:2053';
WSClient.Active := True;
Su altre piattaforme mantieni il backend più adatto: iohOpenSSL funziona ovunque, e iohSChannel è l'opzione nativa, senza nulla da distribuire, su Windows. Una piccola direttiva condizionale mantiene corretto un unico componente client su ogni target.
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;
Nessun OpenSSL nell'APK
Questo è il vantaggio principale. Con il backend nativo l'APK non contiene alcun libssl.so né alcun libcrypto.so. Il pacchetto è più piccolo, e non dovrai mai più rincorrere una versione di OpenSSL, ricompilare a fronte di un avviso di sicurezza o abbinare una build di libreria a un dispositivo. L'implementazione TLS risiede sul dispositivo ed è mantenuta da Android, così le correzioni di sicurezza arrivano tramite gli aggiornamenti di sistema anziché tramite il tuo ciclo di rilascio.
Elimina inoltre un'intera categoria di problemi di distribuzione. Non c'è alcun "library not found", nessun disallineamento di architettura tra il .so incluso e il dispositivo, e nessuna seconda copia di crittografia da verificare. Imposti una proprietà e distribuisci.
Un client TLS completo, non ridotto
Il backend nativo è un client completo. Valida il server rispetto all'archivio di trust di sistema di Android ed esegue la verifica dell'hostname, così le connessioni verso autorità di certificazione pubbliche funzionano senza alcuna configurazione aggiuntiva. Negozia il TLS 1.3 e supporta ALPN su Android 10 (API 29) e versioni successive, il che ti consente di annunciare protocolli applicativi come http/1.1 durante l'handshake.
Poiché si colloca dietro la stessa API TLSOptions di ogni altro backend, le proprietà già note continuano a funzionare. VerifyCertificate attiva o disattiva la validazione del peer, RootCertFile rende attendibile un'autorità privata, CertFile e Password presentano un certificato client, e ALPNProtocols elenca i protocolli da negoziare.
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;
Funziona con i componenti che già usi
Il backend è integrato nelle TLSOptions condivise, quindi non è limitato al client WebSocket. I client TCP e HTTP/2 e gli altri componenti che espongono TLSOptions lo selezionano nello stesso modo. Se il tuo codice imposta già TLSOptions, aggiungere il TLS nativo Android è una singola assegnazione, senza alcuna modifica al modo in cui apri la connessione, invii o ricevi.
La stessa idea su Apple
Se hai come target anche iOS o macOS, il backend complementare iohAppleTLS svolge lì lo stesso compito: usa il TLS proprio di Apple, senza alcun .dylib di OpenSSL da distribuire, e raggiunge il TLS 1.3 tramite Network.framework. Lo schema è identico, basta scegliere l'handler nativo per ciascuna piattaforma. Puoi leggere i dettagli nella pagina Native Apple TLS.
Disponibilità
Il TLS nativo Android (iohAndroidTLS) è incluso nell'edizione Enterprise di sgcWebSockets. Per la panoramica completa dei quattro backend TLS, OpenSSL su ogni piattaforma, SChannel su Windows e gli handler nativi per Android e Apple, consulta la sezione SSL / TLS e la pagina Native Android TLS.
Scarica dalla pagina di download di sgcWebSockets, oppure ottienilo tramite GetIt o il tuo account registrato.
Domande, commenti o aiuto per spostare un'app Android via da OpenSSL? Contattaci, riceverai una risposta dalle persone che hanno scritto il codice.
