Prečo aplikácia nemôže zapnúť uložený profil VPN na Androide alebo v iOS
Postaviť si vlastný tunel a zapnúť uložený profil sú dve rôzne práce. Porovnajte, čo Android, iOS a počítač skutočne aplikácii dovolia.
Dve veľmi odlišné práce sa zaraďujú pod názov programové VPN a iba jedna z nich je dostupná bežnej aplikácii na ktorejkoľvek z dvoch mobilných platforiem. Prvá je zapnutie profilu, ktorý používateľ už uložil; druhá je stavba tunela vo vlastnom procese. Android vám druhú dáva cez VpnService a iOS vám druhú dáva cez právo Network Extension, zatiaľ čo prvá zostáva systému, správcovi zariadenia alebo serveru MDM. Zistenie, ktorú vlastne potrebujete, projekt zvyčajne zmenší.
Dve práce s rovnakým názvom
Aktivácia uloženého profilu znamená povedať existujúcemu tunelu, aby vyšiel: hostiteľ, prihlasovací údaj, protokol, všetko už nastavené niekde, kde to používateľ vidí. Stavba tunela znamená, že váš kód vlastní rozhranie, slučku paketov a protokol. V produktovom backlogue vyzerajú podobne a takmer nezdieľajú implementáciu.
Ani jedna mobilná platforma nevystavuje prvú prácu aplikácii na SDK. Spojenie, ktoré sa objaví bez akéhokoľvek konania používateľa, nemožno odlíšiť od škodlivého softvéru, preto oba systémy stavajú bránu súhlasu pred každú aplikáciu, ktorá prenáša prevádzku.
Android: brána súhlasu a žiadne API pre profily
VpnService existuje od Androidu 4.0 a umožňuje aplikácii vytvoriť rozhranie tun a potom čítať a zapisovať pakety. Služba musí byť deklarovaná s BIND_VPN_SERVICE a VpnService.prepare() vytvára systémový dialóg, ktorý žiada používateľa o povolenie. Ukážka platformy ToyVpn je najjasnejším vyjadrením zamýšľaného tvaru: váš kód vlastní rozhranie i všetko, čo ním prechádza.
Čo nerobí, je pridanie položky na systémovú obrazovku nastavení VPN. Verejné API na to neexistuje a aplikácia Nastavenia drží svoje profily v úložišti, kam sa bežná aplikácia nedostane. Volania skrytých tried z normálnej aplikácie vytvárajú profily, ktoré systém nikdy nezobrazí, a preto kód, ktorý v jednom zostavení vyzeral, že funguje, v ďalšom ticho prestane fungovať.
Spravovaná cesta je oddelená. Správca zariadenia alebo profilu môže určiť balík VPN, ktorý je vždy zapnutý, pomocou API zásad zariadenia a podnikový nástroj môže poslať profil, ktorý používateľ potom schváli. To je právomoc správy zariadenia, nie povolenie, ktoré aplikácia žiada pri inštalácii. Ak je vaším zákazníkom organizácia, je to cesta, na ktorú treba plánovať; ak je vaším zákazníkom človek inštalujúci z obchodu, nie je dostupná vôbec.
iOS: hranicou je oprávnenie
iOS delí rovnakú prácu inak. Klient VPN implementuje poskytovateľa paketového tunela alebo proxy aplikácie v rámci frameworku Network Extension a zodpovedajúce oprávnenie musí byť pridelené vývojárskemu účtu. Osobná konfigurácia VPN cez NEVPNManager existuje pre jednoduchší prípad a stále beží v rovnakom modeli oprávnení. Apple dokumentuje celú plochu v referencii Network Extension, ktorú sa oplatí prečítať, než vymedzíte prácu.
Neexistuje podporovaný spôsob, ako otvoriť obrazovku nastavení VPN, prečítať používateľove uložené konfigurácie alebo jednu z nich spustiť. Klient môže poslať konfiguračný profil na inštaláciu používateľom a potom výsledný tunel používať bežnými sieťovými volaniami. Tunelovanie pre jednotlivé aplikácie prideľuje server MDM pravidlom na vyžiadanie, aplikácia ho za behu nevyberá.
Klient VPN od veľkého dodávateľa nie je dôkaz, že váš účet môže poslať to isté. Tieto oprávnenia sa žiadajú pre každý vývojársky účet a posudzujú sa, takže riziko harmonogramu leží na Apple, nie na vašom pláne šprintu.
Počítač dosiahne ďalej, ale vlastníctvo sa nemení
Windows je permisívny prípad. Add-VpnConnection vytvára položku telefónneho zoznamu zo zvýšeného sedenia PowerShellu a rasdial ju pripája alebo odpája zo skriptu. Aplikácia môže tiež riadiť klientsky program dodávateľa cez jeho dokumentovaný príkazový riadok. Vytvorenie profilu je stále administratívna akcia, pretože položka žije v úložišti pre celý stroj.
macOS sa správa rovnako s inými nástrojmi. scutil --nc start a stop pracujú so službami, ktoré už existujú, zatiaľ čo vytvorenie jednej je úloha systémovej administrácie. Vlastníctvo procesu na notebooku z vás nerobí vlastníka konfigurácie.
Čo postaviť namiesto toho
Ak je skutočnou požiadavkou, aby vaša aplikácia dosiahla na interné API, tunel, ktorý používateľ už prevádzkuje, stačí. Posielajte bežné požiadavky HTTPS, nechajte systém vybrať cestu a prestaňte sa snažiť tunel ovládať. Ak je požiadavkou, aby tunel používala iba prevádzka vašej aplikácie, požiadajte o VPN pre jednotlivé aplikácie cez kanál správy, alebo ukončite TLS vnútri aplikácie voči službe dostupnej bez neho.
Skryté API nie sú skratka, ktorú stojí za to brať. Menia sa medzi verziami, zlyhávajú v recenzii aplikácií a poruchy, ktoré vytvárajú, vyzerajú pre toho, kto kód zdedí, ako bežné sieťové poruchy. Porovnanie nie je Android proti iOS; je to vlastníctvo tunela proti žiadosti, aby platforma smerovala prevádzku, a iba prvé je vaše na stavbu.