Kiadtál egy új buildet, átváltottál a VPN-re, és ugyanaz a képernyő már nem töltődött be. Android 9-en és újabbakon a gyakoribb magyarázat unalmasabb: a platform megtagadja az egyszerű HTTP-t azoktól az alkalmazásoktól, amelyek az API 28-as vagy újabb szintet célozzák, a VPN pedig csak annyi kontextust változtatott, hogy ez kiderüljön. A látott hiba a HTTP-klienstől függ, ezért mondja olyan ritkán, hogy cleartext.

Mi is ez a hiba valójában

Android 9-től a platform alapértelmezés szerint blokkolja a cleartextet, amint egy alkalmazás az API 28-as vagy újabb szintet célozza. A platform az egyszerű HTTP-címre küldött kérést még az előtt elutasítja, hogy egyetlen csomag elhagyná az eszközt. Hogy melyik hibát látod, a HTTP-könyvtártól függ: néha általános hálózati hiba, néha időtúllépés, néha egy üzenet, amely nyíltan megnevezi a cleartextet. Amit soha nem tesz, az az, hogy elérje a szerveredet. Az Android dokumentálja az alapértelmezést és a tartományra korlátozott alternatívát a biztonsági konfigurációs útmutatójában.

Ugyanazon az eszközön egy böngésző még betöltheti az oldalt, és pont ez az a nyom, amelyet a legtöbben elszalasztanak. A böngészők nem tartoznak az alkalmazásod hálózati biztonsági szabályzata alá.

Miért a VPN-t hibáztatják

Általában három dolog változik egyszerre. Az alkalmazás a VPN csatlakozása után más hosztnevet oldhat fel, az eszköz lehet újabb builddel rendelkező új készülék, vagy maga a build került olyan cél-API-szintre, amely kiváltja az alapértelmezést. A VPN látszik, a cél-SDK nem, ezért a VPN kapja a jegyet.

Hasonlítsd össze a régi és az új build célszintjeit, mielőtt hozzányúlsz a hálózati konfigurációhoz. Az az alkalmazás, amely 27-et vagy alacsonyabbat céloz, mentesül, és ez magyarázza az összes „a régi telefonomon működik” típusú jelentést.

Hová kerül valójában az Expo kapcsolója

Egy kezelt Expo-projektben a beállítás hozzáadása az app.json fájlhoz nem szerkeszt Android-manifestet, mert a manifestet a prebuild és a fejlesztői buildek állítják elő. Ebben a szakaszban egy konfigurációs plugin írja a beállítást. A támogatott útvonal az expo-build-properties, amelyet az alkalmazás konfigurációjában állítasz be a cleartext opcióval az android alatt.

{
  "plugins": [
    ["expo-build-properties", {
      "android": { "usesCleartextTraffic": true }
    }]
  ]
}

A részlet csak a plugin opcióját állítja be; a manifest később készül el. Futtass egy prebuildet vagy egy friss fejlesztői kliens buildet, majd újratesztelés előtt vizsgáld meg a létrehozott AndroidManifest.xml fájlt android:usesCleartextTraffic szempontjából, mert a csak JS-ből történő újratöltés megtartja a régi manifestet. Igazítsd a plugin verzióját ahhoz az Expo SDK-hoz, amelyen a projekt fut. A plugin opciói kiadásról kiadásra mozognak, és egy másik SDK-ból másolt részlet megbízható forrása a csendes semmittevésnek.

A bare munkafolyamat és a szűkebb lehetőség

Bare React Native esetén a megfelelő az android:usesCleartextTraffic az application elemen, vagy egy hálózati biztonsági konfiguráció, amely csak megnevezett tartományok számára engedi a cleartextet. A tartományra korlátozott forma az előnyben részesítendő, mert engedi a belső API-t, és minden mást HTTPS-en hagy. Dokumentálja a saját kivétellistáját is, és egy bíráló pont ezt fogja kérdezni.

Egyik megközelítés sem változtatja meg a platform alapértelmezését olyasmire, amit nem neveztél meg.

Először az eszköznaplóból bizonyítsd

A konfiguráció szerkesztése előtt szerezd meg a pontos hibát. Egy csatlakoztatott eszközön az adb logcat megmutatja a platform cleartext-elutasítását, és megnevezi az azt kiváltó komponenst. Egy elutasított socket, egy fel nem oldható név vagy egy sikertelen TLS-kézfogás egészen máshová mutat, és a cleartext engedélyezése csak gyengítené az alkalmazást ok nélkül.

Utána tartsd őszintén a produkciót. A cleartext elfogadható egy olyan laborvégpontnál, amely nem tud TLS-t kínálni, és csak a lehető legrövidebb ideig, amit be tudsz ütemezni. Ha az API a magánhálózaton belül tudja lezárni a TLS-t, tedd a tanúsítványt az eszköz megbízhatósági tárolójába, és hagyd kikapcsolva a cleartextet, mert az alagút a kijáratáig titkosítja az utat, azon túl semmit.

Amint a végpont HTTPS-en válaszol, vedd le az engedélyt, építs újra, és teszteld a VPN-en és közönséges Wi-Fi-n ugyanabban a munkamenetben. A névfeloldás eltérhet a két útvonal között, és csak a pár mondja meg, melyik mond igazat.

Kapcsolódó cikkek