Wydanie bezpiecznej aplikacji na Androida w Delphi lub C++Builder zawsze wiązało się z jednym dodatkowym obowiązkiem: dołączeniem libssl.so i libcrypto.so do APK, aby OpenSSL był dostępny w czasie działania. sgcWebSockets eliminuje ten obowiązek. Nowy natywny backend TLS, iohAndroidTLS, przekazuje szyfrowanie samemu Androidowi, dzięki czemu aplikacja łączy się przez TLS bez żadnych bibliotek OpenSSL do wdrożenia. Jest dostępny w edycji Enterprise.
Pod maską backend obsługuje systemowy javax.net.ssl.SSLEngine poprzez JNI. System operacyjny wykonuje uzgadnianie, szyfrowanie rekordów i walidację certyfikatu. sgcWebSockets jedynie podaje tekst jawny na wejściu i otrzymuje szyfrogram na wyjściu, co oznacza, że cały stos TLS jest tym, który Google dostarcza i łata wraz z systemem operacyjnym.
Jedna linia, by przełączyć
Backend TLS wybiera się poprzez TLSOptions.IOHandler. Aby użyć natywnego TLS Androida, ustaw go na iohAndroidTLS. Wszystko inne w kodzie sieciowym pozostaje bez zmian.
uses
sgcWebSocket, sgcWebSocket_Types;
WSClient.TLS := True;
WSClient.TLSOptions.IOHandler := iohAndroidTLS;
WSClient.URL := 'wss://www.esegece.com:2053';
WSClient.Active := True;
Na innych platformach zachowujesz backend, który pasuje: iohOpenSSL działa wszędzie, a iohSChannel to natywna opcja na Windows, niewymagająca wdrażania niczego. Niewielki warunek utrzymuje pojedynczy komponent klienta poprawnym na każdej platformie docelowej.
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;
Bez OpenSSL w APK
To główna korzyść. Z natywnym backendem APK nie zawiera ani libssl.so, ani libcrypto.so. Pakiet jest mniejszy i nigdy więcej nie gonisz za wersją OpenSSL, nie przebudowujesz pod kątem ostrzeżenia o bezpieczeństwie ani nie dopasowujesz kompilacji biblioteki do urządzenia. Implementacja TLS znajduje się na urządzeniu i jest utrzymywana przez Androida, więc poprawki bezpieczeństwa docierają przez aktualizacje systemu, a nie przez Twój cykl wydawniczy.
Eliminuje to także całą klasę problemów z wdrażaniem. Nie ma „biblioteki nie znaleziono”, nie ma niezgodności architektury między dołączonym plikiem .so a urządzeniem ani drugiej kopii kryptografii do audytu. Ustawiasz jedną właściwość i wydajesz aplikację.
Pełnoprawny klient TLS, nie okrojony
Natywny backend to kompletny klient. Weryfikuje serwer względem systemowego magazynu zaufania Androida i przeprowadza weryfikację nazwy hosta, więc połączenia z publicznymi urzędami certyfikacji działają bez dodatkowej konfiguracji. Negocjuje TLS 1.3 i obsługuje ALPN na Android 10 (API 29) oraz nowszych, co pozwala ogłaszać protokoły aplikacyjne, takie jak http/1.1, podczas uzgadniania.
Ponieważ znajduje się za tym samym API TLSOptions co każdy inny backend, znane właściwości nadal działają. VerifyCertificate włącza lub wyłącza walidację po stronie peera, RootCertFile ufa prywatnemu urzędowi, CertFile i Password przedstawiają certyfikat klienta, a ALPNProtocols wymienia protokoły do negocjacji.
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;
Działa z komponentami, których już używasz
Backend jest podłączony do współdzielonego TLSOptions, więc nie ogranicza się do klienta WebSocket. Klienci TCP i HTTP/2 oraz pozostałe komponenty, które udostępniają TLSOptions, wybierają go w ten sam sposób. Jeśli Twój kod już ustawia TLSOptions, dodanie natywnego TLS dla Androida to pojedyncze przypisanie, bez zmiany sposobu otwierania połączenia, wysyłania czy odbierania.
Ta sama idea na Apple
Jeśli celujesz także w iOS lub macOS, towarzyszący backend iohAppleTLS wykonuje tam to samo zadanie: korzysta z własnego TLS Apple, bez wdrażania OpenSSL .dylib, i osiąga TLS 1.3 poprzez Network.framework. Wzorzec jest identyczny, po prostu wybierasz natywny handler dla każdej platformy. Szczegóły możesz przeczytać na stronie Native Apple TLS.
Dostępność
Natywne TLS dla Androida (iohAndroidTLS) dostarczane jest w edycji Enterprise sgcWebSockets. Pełne zestawienie czterech backendów TLS, OpenSSL na każdej platformie, SChannel na Windows oraz natywnych handlerów dla Androida i Apple znajdziesz w sekcji SSL / TLS oraz na stronie Native Android TLS.
Pobierz z strony pobierania sgcWebSockets lub uzyskaj przez GetIt albo swoje zarejestrowane konto.
Pytania, opinie lub pomoc w przeniesieniu aplikacji na Androida z OpenSSL? Skontaktuj się z nami, odpowiedź otrzymasz od ludzi, którzy napisali ten kod.
