Zašto aplikacija ne može uključiti sačuvani VPN profil na Androidu ili iOS-u
Izgradnja vlastitog tunela i uključivanje sačuvanog profila dva su različita posla. Uporedite šta Android, iOS i desktop zaista dopuštaju aplikaciji.
Dva vrlo različita posla trpaju se pod naziv programskog VPN-a, a samo jedan od njih dostupan je običnoj aplikaciji na bilo kojoj od dvije mobilne platforme. Prvi je uključivanje profila koji je korisnik već sačuvao; drugi je izgradnja tunela unutar vlastitog procesa. Android vam drugi daje kroz VpnService, a iOS vam drugi daje kroz pravo Network Extension, dok prvi ostaje kod sistema, vlasnika uređaja ili MDM servera. Utvrđivanje koji vam zapravo treba obično čini projekt manjim.
Dva posla s istim imenom
Aktiviranje sačuvanog profila znači reći postojećem tunelu da se podigne: host, vjerodajnica, protokol, sve već konfigurisano negdje gdje korisnik može vidjeti. Izgradnja tunela znači da vaš kod posjeduje interfejs, petlju paketa i protokol. U produktnom backlogu izgledaju slično i gotovo da ne dijele implementaciju.
Nijedna mobilna platforma ne izlaže prvi SDK aplikaciji. Veza koja se pojavi bez ikakve radnje korisnika ne razlikuje se od zlonamjernog softvera, pa oba sistema stavljaju kapiju saglasnosti pred svaku aplikaciju koja prenosi saobraćaj.
Android: kapija saglasnosti i nema API-ja za profile
VpnService postoji od Androida 4.0 i omogućava aplikaciji da stvori tun interfejs, a zatim čita i piše pakete. Usluga mora biti deklarisana s BIND_VPN_SERVICE, a VpnService.prepare() stvara sistemski dijalog koji traži od korisnika da je dozvoli. Primjer platforme, ToyVpn, najjasnija je izjava namjeravanog oblika: vaš kod posjeduje interfejs i sve što kroz njega prolazi.
Ono što ne radi jeste dodavanje unosa na sistemski ekran VPN postavki. Za to nema javnog API-ja, a aplikacija Postavke drži svoje profile u spremištu do kojeg obična aplikacija ne može doći. Pozivi skrivenih klasa iz normalne aplikacije stvaraju profile koje sistem nikad ne prikazuje, zato kod koji je izgledao da radi u jednom buildu tiho prestaje raditi u sljedećem.
Upravljani put je odvojen. Vlasnik uređaja ili vlasnik profila može odrediti paket VPN-a koji je uvijek uključen kroz API-je politike uređaja, a poslovni alat može poslati profil koji korisnik zatim odobri. To je ovlaštenje za upravljanje uređajem, a ne dozvola koju aplikacija traži pri instalaciji. Ako je vaš klijent organizacija, to je put za koji treba planirati; ako je vaš klijent osoba koja instalira iz trgovine, to uopće nije dostupno.
iOS: pravo je granica
iOS dijeli isti posao drugačije. VPN klijent implementira pružaoca paketnog tunela ili proxy aplikacije unutar Network Extension okvira, a odgovarajuće pravo mora biti odobreno razvojnom računu. Lična VPN konfiguracija kroz NEVPNManager postoji za jednostavniji slučaj i ona i dalje radi unutar istog modela dozvola. Apple dokumentira cijelu površinu u Network Extension referenci, koju vrijedi pročitati prije nego što odredite obim posla.
Nema podržanog načina da otvorite ekran VPN postavki, pročitate korisnikove sačuvane konfiguracije ili pokrenete jednu od njih. Klijent može poslati konfiguracijski profil koji korisnik instalira, a zatim koristiti dobijeni tunel kroz obične mrežne pozive. Tuneliranje po aplikaciji dodjeljuje MDM server kroz pravilo na zahtjev, a ne bira aplikacija u vrijeme izvršavanja.
VPN klijent velikog dobavljača nije dokaz da vaš račun može poslati istu stvar. Ta prava se traže po razvojnom računu i pregledaju, pa rizik rasporeda leži na Appleu, a ne na vašem planu sprinta.
Desktop doseže dalje, ali vlasništvo je nepromijenjeno
Windows je permisivni slučaj. Add-VpnConnection stvara unos u telefonskom imeniku iz podignute PowerShell sesije, a rasdial ga povezuje ili prekida iz skripte. Aplikacija također može upravljati klijentom dobavljača kroz njegovu dokumentiranu komandnu liniju. Stvaranje profila i dalje je administrativna radnja, jer unos živi u spremištu na nivou mašine.
macOS se ponaša isto s drugim alatima. scutil --nc start i stop rade na uslugama koje već postoje, dok je stvaranje jedne zadatak sistemske administracije. Posjedovanje procesa na laptopu ne čini vas vlasnikom konfiguracije.
Šta izgraditi umjesto toga
Ako je stvarni zahtjev da vaša aplikacija dosegne interni API, tunel koji korisnik već pokreće dovoljan je. Šaljite obične HTTPS zahtjeve, pustite sistem da odabere put, i prestanite pokušavati kontrolisati tunel. Ako je zahtjev da samo saobraćaj vaše aplikacije koristi tunel, tražite VPN po aplikaciji kroz kanal upravljanja, ili prekinite TLS unutar aplikacije prema usluzi dostupnoj bez njega.
Skriveni API-ji nisu prečica koju vrijedi uzeti. Mijenjaju se između izdanja, padaju na pregledu aplikacija, a kvarovi koje proizvode izgledaju onome ko naslijedi kod kao obični mrežni kvarovi. Poređenje nije Android protiv iOS-a; to je posjedovanje tunela protiv molbe platformi da usmjerava saobraćaj, i samo je prvo vaše za izgradnju.