Wêrom’t in app in bewarre VPN-profyl op Android of iOS net oansette kin
Jo eigen tunnel bouwe en in bewarre profyl oansette binne twa ferskillende taken. Ferlykje wat Android, iOS en it buroblêd in app echt tastean.
Twa hiel ferskillende taken falle ûnder de namme programmatyske VPN, en mar ien dêrfan is beskikber foar in gewoane app op ien fan beide mobile platfoarms. De earste is in profyl oansette dat de brûker al bewarre hat; de twadde is in tunnel bouwe yn jo eigen proses. Android jout jo de twadde fia VpnService en iOS jout jo de twadde fia it rjocht Network Extension, wylst de earste by it systeem, in eigner fan it apparaat of in MDM-tsjinner bliuwt. Utfine hokker oft jo echt nedich hawwe makket it projekt meastentiids lytser.
Twa taken mei deselde namme
In bewarre profyl aktivearje betsjut in besteande tunnel sizze dat er omheech moat: in host, oanmeldgegevens, in protokol, alles al konfigurearre earne dêr’t de brûker it sjen kin. In tunnel bouwe betsjut dat jo koade de ynterface, de pakketlus en it protokol besit. Se lykje opinoar yn in produktbacklog en diele hast gjin ymplemintaasje.
Gjin fan beide mobile platfoarms stelt de earste bleat oan in SDK-app. In ferbining dy’t ferskynt sûnder dat de brûker eat docht is net te ûnderskieden fan malware, dêrom sette beide systemen in tastimmingspoarte foar elke app dy’t ferkear draacht.
Android: in tastimmingspoarte en gjin profyl-API
VpnService bestiet sûnt Android 4.0 en lit in app in tun-ynterface meitsje, en dan pakketten lêze en skriuwe. De tsjinst moat mei BIND_VPN_SERVICE ferklearre wurde, en VpnService.prepare() produsearret de systeemdialooch dy’t de brûker freget it ta te stean. It platfoarmfoarbyld, ToyVpn, is de dúdlikste útspraak fan ’e bedoelde foarm: jo koade besit de ynterface en alles wat dêr trochhinne streamt.
Wat it net docht is in ynfier taheakje oan it VPN-ynstellingsskerm fan it systeem. Dêrfoar is gjin iepenbiere API, en de app Ynstellingen hâldt syn profylen yn in opslach dêr’t in gewoane app net by kin. Oproppen nei de ferburgen klassen fan in normale app meitsje profylen dy’t it systeem nea listet, dêrom hâldt koade dy’t yn ien build wurkje like der stil mei op om yn ’e folgjende te wurkjen.
It beheardere paad is apart. In eigner fan it apparaat of fan it profyl kin in altyd-oan VPN-pakket oanwize fia de apparaatbelied-API’s, en in bedriuwsark kin in profyl stjoere dat de brûker dan goedkart. Dat is apparaatbehearbefoechdheid, net in tastimming dy’t in app by ynstallaasje freget. As jo klant in organisaasje is, is dit it paad om foar te plenjen; as jo klant in persoan is dy’t út in winkel ynstallearret, is it hielendal net beskikber.
iOS: it rjocht is de grins
iOS ferdielt itselde wurk oars. In VPN-klant ymplementearret in pakkettunnel-oanbieder of in app-proxy ûnder it Network Extension-ramtwurk, en it byhearrende rjocht moat oan it ûntwikkelersakkount jûn wurde. In persoanlike VPN-konfiguraasje fia NEVPNManager bestiet foar it ienfâldiger gefal, en dy rint noch altyd binnen itselde tastimmingsmodel. Apple dokumintearret it hiele oerflak yn ’e Network Extension-referinsje, dy’t de muoite wurdich is om te lêzen foardat jo it wurk ôfbeakene.
Der is gjin stipe manier om it VPN-ynstellingsskerm te iepenjen, de bewarre konfiguraasjes fan ’e brûker te lêzen of ien dêrfan te starten. Wat in klant dwaan kin is in konfiguraasjeprofyl stjoere dat de brûker ynstallearret, en dan de ûntstiene tunnel brûke fia gewoane netwurkoanroppen. Tunneling per app wurdt tawiisd troch in MDM-tsjinner fia in regel op oanfraach, net troch de app keazen by runtime.
In VPN-klant fan in grutte leveransier is gjin bewiis dat jo akkount itselde stjoere kin. Dy rjochten wurde per ûntwikkelersakkount oanfrege en beoardiele, dus it skemarisiko leit by Apple, net by jo sprintplan.
It buroblêd rikt fierder, mar eigendom bliuwt itselde
Windows is it tastienende gefal. Add-VpnConnection makket in telefoanboekynfier fan in ferhege PowerShell-sesje, en rasdial ferbynt of ûntbrekt dy fan in skript. In app kin ek in leveransierklant oanstjoere fia syn dokumintearre kommandorigel. It meitsjen fan it profyl is noch altyd in administraasjehanneling, om’t de ynfier yn in opslach foar de hiele masine wennet.
macOS gedraacht him itselde mei oare ark. scutil --nc start en stop wurkje op tsjinsten dy’t al bestean, wylst it meitsjen fan ien in systeemadministraasjetaak is. It besit fan it proses op in laptop makket jo gjin eigner fan ’e konfiguraasje.
Wat ynstee te bouwen
As de echte eask is dat jo app in ynterne API berikt, is de tunnel dy’t de brûker al rint genôch. Doch gewoane HTTPS-fersiken, lit it systeem it paad kieze, en hâld op mei te besykjen de tunnel te behearen. As de eask is dat allinne it ferkear fan jo app de tunnel brûkt, freegje dan om per-app VPN fia it behearjoek, of beëinigje TLS yn ’e app tsjin in tsjinst dy’t sûnder ien berikber is.
Ferburgen API’s binne gjin koartpaad dat de muoite wurdich is. Se feroarje tusken ferzjes, se mislearje by app-beoardieling, en de flaters dy’t se produsearje lykje foar wa’t de koade erft op gewoane netwurkflaters. De ferliking is net Android tsjin iOS; it is in tunnel besitte tsjin it platfoarm freegje om ferkear te rûtele, en allinne it earste is jo om te bouwen.