Dve zelo različni deli se uvrščata pod ime programski VPN, in le eno od njiju je na voljo običajni aplikaciji na kateri koli od dveh mobilnih platform. Prvo je vklop profila, ki ga je uporabnik že shranil; drugo je gradnja tunela znotraj lastnega procesa. Android vam drugo da prek VpnService in iOS vam drugo da prek pravice Network Extension, medtem ko prvo ostane pri sistemu, lastniku naprave ali strežniku MDM. Ugotavljanje, katero v resnici potrebujete, običajno naredi projekt manjši.

Dve deli z istim imenom

Aktiviranje shranjenega profila pomeni reči obstoječemu tunelu, naj se dvigne: gostitelj, poverilnica, protokol, vse že konfigurirano nekje, kjer lahko uporabnik to vidi. Gradnja tunela pomeni, da vaša koda poseduje vmesnik, zanko paketov in protokol. V produktnem zaostanku sta si podobna in skoraj ne delita izvedbe.

Nobena mobilna platforma ne izpostavi prvega aplikaciji SDK. Povezava, ki se pojavi brez uporabnikovega dejanja, je neločljiva od zlonamerne programske opreme, zato oba sistema postavita vrata soglasja pred vsako aplikacijo, ki prenaša promet.

Android: vrata soglasja in nobenega API-ja za profile

VpnService obstaja od Androida 4.0 in omogoča aplikaciji ustvariti vmesnik tun, nato brati in pisati pakete. Storitev mora biti deklarirana z BIND_VPN_SERVICE, in VpnService.prepare() ustvari sistemsko pogovorno okno, ki od uporabnika zahteva dovoljenje. Vzorec platforme ToyVpn je najjasnejša izjava predvidene oblike: vaša koda poseduje vmesnik in vse, kar teče skozenj.

Česar ne naredi, je dodajanje vnosa na sistemski zaslon nastavitev VPN. Za to ni javnega API-ja, in aplikacija Nastavitve hrani svoje profile v shrambi, do katere običajna aplikacija ne pride. Klici skritih razredov iz običajne aplikacije ustvarijo profile, ki jih sistem nikoli ne navede, zato koda, ki je v eni gradnji delovala, v naslednji tiho preneha delovati.

Upravljana pot je ločena. Lastnik naprave ali profila lahko določi paket VPN, ki je vedno vklopljen, prek API-jev politike naprave in poslovno orodje lahko pošlje profil, ki ga uporabnik nato odobri. To je pooblastilo za upravljanje naprave, ne dovoljenje, ki ga aplikacija zahteva ob namestitvi. Če je vaša stranka organizacija, je to pot, za katero morate načrtovati; če je vaša stranka oseba, ki namešča iz trgovine, sploh ni na voljo.

iOS: pravica je meja

iOS deli isto delo drugače. Odjemalec VPN izvaja ponudnika paketnega tunela ali proxy aplikacije v okviru Network Extension, in ustrezna pravica mora biti dodeljena razvijalskemu računu. Osebna konfiguracija VPN prek NEVPNManager obstaja za preprostejši primer in še vedno deluje v istem modelu dovoljenj. Apple dokumentira celotno površino v referenci Network Extension, ki jo velja prebrati, preden določite obseg dela.

Ni podprtega načina za odpiranje zaslona nastavitev VPN, branje uporabnikovih shranjenih konfiguracij ali zagon ene od njih. Odjemalec lahko pošlje konfiguracijski profil, ki ga uporabnik namesti, in nato uporablja nastali tunel prek običajnih omrežnih klicev. Tuneliranje za posamezno aplikacijo dodeli strežnik MDM s pravilom na zahtevo, ne izbere ga aplikacija med izvajanjem.

Odjemalec VPN velikega ponudnika ni dokaz, da lahko vaš račun pošlje isto stvar. Te pravice se zahtevajo za vsak razvijalski račun in pregledajo, zato tveganje urnika leži pri Applu, ne v vašem načrtu sprinta.

Namizje sega dlje, a lastništvo ostaja enako

Windows je permisivni primer. Add-VpnConnection ustvari vnos v telefonskem imeniku iz povišane seje PowerShell, in rasdial ga poveže ali prekine iz skripta. Aplikacija lahko vodi tudi odjemalca ponudnika prek njegove dokumentirane ukazne vrstice. Ustvarjanje profila je še vedno administrativno dejanje, ker vnos živi v shrambi za celoten stroj.

macOS se obnaša enako z drugimi orodji. scutil --nc start in stop delujeta na storitvah, ki že obstajajo, medtem ko je ustvarjanje ene naloga sistemske administracije. Lastništvo procesa na prenosniku vas ne naredi za lastnika konfiguracije.

Kaj zgraditi namesto tega

Če je resnična zahteva, da vaša aplikacija doseže notranji API, zadostuje tunel, ki ga uporabnik že izvaja. Pošiljajte običajne zahteve HTTPS, pustite sistemu, da izbere pot, in prenehajte poskušati nadzorovati tunel. Če je zahteva, da tunel uporablja samo promet vaše aplikacije, zaprosite za VPN za posamezne aplikacije po kanalu upravljanja, ali končajte TLS znotraj aplikacije proti storitvi, dostopni brez njega.

Skriti API-ji niso bližnjica, ki se je splača lotiti. Med izdajami se spreminjajo, spodletijo pri pregledu aplikacij, in napake, ki jih povzročijo, se tistemu, ki kodo podeduje, zdijo običajne omrežne napake. Primerjava ni Android proti iOS; to je lastništvo tunela proti prošnji, da platforma usmerja promet, in le prvo je vaše za gradnjo.

Sorodni članki