Сиз жаңы build чыгардыңыз, VPN’ге өттүңүз, жана ошол эле экран жүктөлбөй калды. Android 9 жана андан жогорку версияларда көбүрөөк кездешүүчү түшүндүрмө зериктирер: платформа API 28 же андан жогорку деңгээлди максат кылган колдонмолор үчүн жөнөкөй HTTP’ни четке кагат, VPN болсо аны ачыкка чыгарууга жетиштүү контекстти гана өзгөрттү. Көргөн катаңыз HTTP кардарына жараша болот, ошондуктан ал cleartext деп абдан сейрек айтат.

Бул ийгиликсиздик чындыгында эмне

Android 9’дон баштап платформа колдонмо API 28 же андан жогорку деңгээлди максат кылгандан кийин cleartext’ти демейки боюнча бөгөттөйт. Жөнөкөй HTTP дарегине болгон сурам түзмөктөн бир пакет чыкпай туруп эле платформа тарабынан четке кагылат. Кандай ката көрөрүңүз HTTP китепканасына жараша: кээде жалпы тармактык бузулуу, кээде убакыттын бүтүшү, кээде cleartext’ти ачык атаган билдирүү. Ал эч качан кылбаган нерсе — сервериңизге жетүү. Android демейки жүрүм-турумду жана домен менен чектелген альтернативаны өзүнүн коопсуздук конфигурациясы боюнча колдонмосунда документтештирет.

Ошол эле түзмөктөгү браузер баракты дагы эле жүктөй алат, жана көпчүлүк байкабаган белги ушул. Браузерлер колдонмоңуздун тармактык коопсуздук саясатына баш ийбейт.

Эмне үчүн VPN күнөөлөнөт

Адатта үч нерсе бир убакта өзгөрөт. Колдонмо VPN туташкандан кийин башка хост атын чечмелеши мүмкүн, түзмөк жаңы жана жаңыраак build менен болушу мүмкүн, же build өзү демейкини иштетүүчү максаттуу API деңгээлине өткөн болушу мүмкүн. VPN көрүнөт, максаттуу SDK көрүнбөйт, ошондуктан билетти VPN алат.

Тармактык конфигурацияга тийүүдөн мурун эски жана жаңы build’дин максаттуу деңгээлдерин салыштырыңыз. 27 же андан төмөн деңгээлди максат кылган колдонмо бошотулат, жана бул «менин эски телефонумда иштейт» деген ар бир билдирүүнү түшүндүрөт.

Expo желеги чындыгында кайда түшөт

Башкарылуучу Expo долбоорунда app.json файлына параметр кошуу Android манифестин оңдобойт, анткени манифести prebuild жана development build’дер түзөт. Ошол этапта параметрди конфигурация плагини жазат. Колдоого алынган жол — expo-build-properties, ал колдонмо конфигурациясында android астында cleartext опциясы менен жөндөлөт.

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

Үзүндү плагиндин опциясын гана конот; манифест кийин түзүлөт. Prebuild же жаңы development-client build иштетиңиз, андан кийин кайра текшерүүдөн мурун түзүлгөн AndroidManifest.xml файлынан android:usesCleartextTraffic бар-жогун караңыз, анткени тек JS менен кайра жүктөө эски манифести сактайт. Плагиндин версиясын долбоор иштеген Expo SDK менен шайкеш келтириңиз. Плагиндин опциялары чыгарылыштар арасында жылат, ал эми башка SDK’дан көчүрүлгөн үзүндү үнсүз иштебей калуунун ишенимдүү булагы.

Bare агымы жана тарраак тандоо

Bare React Native үчүн барабар нерсе — application элементиндеги android:usesCleartextTraffic, же cleartext’ке аталган домендер үчүн гана уруксат берүүчү тармактык коопсуздук конфигурациясы. Домен менен чектелген форманы тандоо керек, анткени ал ички API’ге уруксат берет жана калганын HTTPS’те калтырат. Ал ошондой эле өзүнүн өзгөчөлүктөр тизмесин документтештирет, жана сынчы дал ушул бөлүк тууралуу сурайт.

Эки ыкманын эч бири сиз атабаган нерсе үчүн платформанын демейки жүрүм-турумун өзгөртпөйт.

Алгач түзмөктүн журналынан далилдеңиз

Конфигурацияны оңдоодон мурун так ийгиликсиздикти алыңыз. Туташкан түзмөктөгү adb logcat платформанын cleartext’тен баш тартуусун көрсөтөт жана аны козгогон компонентти атайт. Четке кагылган сокет, чечилбеген ат же ийгиликсиз TLS кол алышуу таптакыр башка жерди көрсөтөт, ал эми cleartext’ти күйгүзүү колдонмону текке гана алсыратат.

Андан кийин өндүрүштү ак ниет кармаңыз. TLS сунуштай албаган лабораториялык акыркы чекит үчүн cleartext кабыл алынат, жана пландай алган эң кыска убакытка гана. Эгер API жеке тармактын ичинде TLS’ти бүтүрө алса, сертификатты түзмөктүн ишеним кампасына салыңыз жана cleartext’ти өчүк калтырыңыз, анткени туннель өз чыгуусуна чейинки жолду шифрлайт, андан ары эч нерсени эмес.

Акыркы чекит HTTPS’те жооп бере баштагандан кийин уруксатты алып салыңыз, кайра build кылыңыз жана ошол эле сессияда VPN’де жана жөнөкөй Wi-Fi’де текшериңиз. Аттарды чечмелөө бул эки жолдо айырмаланышы мүмкүн, жана кайсынысы чындыкты айтып жатканын жуп гана көрсөтөт.

Тектеш макалалар