D’Expo-App schléit bei HTTP op Android 9 fehl: et ass cleartext, net de VPN
En Expo-Build, deen eng einfach HTTP-API opruffe muss, schléit op Android 9 an duerno fehl. Den Tunnel ass onschëlleg: de cleartext-Flag gehéiert an d’Build-Konfiguratioun.
Dir hutt en neie Build ausgeliwwert, sidd op de VPN gewiesselt, an deen nämmlechte Bildschierm huet opgehalen ze lueden. Op Android 9 an duerno ass déi méi heefeg Erklärung méi langweileg: d’Plattform refuséiert einfachen HTTP fir Apps, déi op API 28 oder méi héich zielen, an de VPN huet just genuch Kontext geännert, fir et ze weisen. De Feeler, deen Dir gesitt, hänkt vum HTTP-Client of, dofir seet en esou selten cleartext.
Wat dëse Feeler tatsächlech ass
Vun Android 9 un blockéiert d’Plattform cleartext als Standard, soubal eng App op API-Niveau 28 oder méi héich zielt. D’Plattform refuséiert d’Ufro un eng einfach HTTP-Adress, ier ee Pak et Gerät verléisst. Wéi ee Feeler Dir gesitt, hänkt vun der HTTP-Bibliothéik of: heiansdo en allgemenge Netzwierkfeeler, heiansdo en Timeout, heiansdo eng Noriicht, déi cleartext direkt nennt. Wat se ni mécht, ass äre Server erreechen. Android dokumentéiert den Standard an d’Alternativ, déi op Domainen agegrenzt ass, an hirem Leitfueden zur Sécherheetskonfiguratioun.
E Browser um selwechten Apparat kann d’Säit nach lueden, an dat ass de Clue, deen déi meescht Leit iwwersinn. Browseren ënnerleien net der Netzwierksécherheetspolitik vun ärer App.
Firwat de VPN beschëllegt gëtt
Normalerweis ännere sech dräi Saachen zur gläicher Zäit. D’App kann en aneren Hostnumm opléisen, nodeems de VPN verbonnen ass, den Apparat kann en neien mat engem méi neie Build sinn, oder de Build selwer kann op en Zil-API-Niveau gerutscht sinn, deen den Standard ausléist. De VPN ass sichtbar an den Zil-SDK net, dofir kritt de VPN den Ticket.
Vergläicht d’Zilniveauen vum ale an neie Build, ier Dir d’Netzwierkkonfiguratioun ufellt. Eng App, déi op 27 oder manner zielt, ass ausgeholl, an dat erkläert all Rapport vun der Aart «et geet op mengem ale Telefon».
Wou de Flag vun Expo wierklech landt
An engem verwalteten Expo-Projet ännert d’Bäisetze vun enger Astellung an app.json keen Android-Manifest, well de Manifest entsteet duerch Prebuild an Development-Builds. Et ass e Konfiguratiouns-Plugin, deen d’Astellung an där Etapp schreift. Den ënnerstëtzte Wee ass expo-build-properties, konfiguréiert an der App-Konfiguratioun mat der cleartext-Optioun ënner android.
{
"plugins": [
["expo-build-properties", {
"android": { "usesCleartextTraffic": true }
}]
]
}Den Extrait setzt just d’Plugin-Optioun; de Manifest entsteet méi spéit. Starte Prebuild oder en neie Development-Client-Build, a kuckt dann virum Neitest de generéierten AndroidManifest.xml op android:usesCleartextTraffic un, well e Neilosse just mat JS deen ale Manifest behält. Passt d’Plugin-Versioun un den Expo SDK un, op deem de Projet leeft. Plugin-Optioune réckelen tëscht Releases, an en Extrait, deen aus engem aneren SDK kopéiert gouf, ass eng zouverlässeg Quell vu stillem Näischt-Maachen.
De Bare-Workflow an déi méi schmuel Optioun
Fir bare React Native ass d’Äquivalent android:usesCleartextTraffic um application-Element, oder eng Netzwierksécherheetskonfiguratioun, déi cleartext just fir genannte Domainen erlaabt. D’Form, déi op Domainen agegrenzt ass, ass déi, déi ee sollte virzéien, well se déi intern API erlaabt an alles anescht op HTTPS léisst. Se dokumentéiert och hir eege Ausnameleescht, an dat ass Deel, deen e Revisuer froe wäert.
Keen vun den zwou Approchen ännert den Standard vun der Plattform fir eppes, wat Dir net genannt hutt.
Beweist et fir d’éischt aus dem Apparat-Log
Ier Dir d’Konfiguratioun ännert, hutt de geneeë Feeler. adb logcat op engem ugeschlossenen Apparat weist d’cleartext-Refus vun der Plattform an nennt d’Komponent, déi se ausgeléist huet. En refuséierte Socket, en Numm, deen sech net opléist, oder een erfolleglosen TLS-Handshake deiten op eng ganz aner Plaz hin, an cleartext anzeschalten géif d’App just ouni Grond schwächen.
Da hal d’Produktioun éierlech. Cleartext ass akzeptabel fir en Labor-Endpunkt, deen keen TLS ubidden kann, an nëmmen fir déi kierzt Zäit, déi Dir plangen kënnt. Wann d’API TLS am private Netz ka beenden, setzt d’Zertifikat an den Trust Store vum Apparat a loosst cleartext ausgeschalt, well den Tunnel de Wee bis zu sengem Ausgang verschlësselt an näischt dohinner.
Soubal den Endpunkt iwwer HTTPS äntwert, hutt d’Erlaabnis ewech, baut nei a testt op dem VPN an op normalem Wi-Fi an der selwechter Sessioun. D’Nimm-Opléisung kann tëscht dësen zwee Weeër ënnerschiddlech sinn, an nëmmen d’Puer seet Iech, wien d’Wourecht seet.