Miksi sovellus ei voi kytkeä tallennettua VPN-profiilia päälle Androidissa tai iOS:ssä
Oman tunnelin rakentaminen ja tallennetun profiilin kytkeminen päälle ovat kaksi eri työtä. Vertaa, mitä Android, iOS ja työpöytä todella sallivat sovellukselle.
Kaksi hyvin erilaista työtä luokitellaan ohjelmallisen VPN:n alle, ja vain toinen niistä on tavallisen sovelluksen saatavilla kummallakaan mobiilialustalla. Ensimmäinen on kytkeä päälle profiili, jonka käyttäjä on jo tallentanut; toinen on rakentaa tunneli omaan prosessiisi. Android antaa toisen VpnService kautta ja iOS antaa toisen Network Extension -oikeuden kautta, kun taas ensimmäinen jää järjestelmälle, laitteen omistajalle tai MDM-palvelimelle. Sen selvittäminen, kumpaa todella tarvitset, tekee projektista yleensä pienemmän.
Kaksi työtä samalla nimellä
Tallennetun profiilin aktivoiminen tarkoittaa olemassa olevalle tunnelille sanomista, että se nousisi: isäntä, kirjautumistieto, protokolla, kaikki jo määritettynä jossain, missä käyttäjä voi nähdä sen. Tunnelin rakentaminen tarkoittaa, että koodisi omistaa rajapinnan, pakettisilmukan ja protokollan. Ne näyttävät samanlaisilta tuotteen työlistalla eivätkä juuri jaa toteutusta.
Kumpikaan mobiilialusta ei altista ensimmäistä SDK-sovellukselle. Yhteys, joka ilmestyy ilman, että käyttäjä tekee mitään, on mahdotonta erottaa haittaohjelmasta, joten molemmat järjestelmät asettavat suostumusportin jokaisen sovelluksen eteen, joka kuljettaa liikennettä.
Android: suostumusportti eikä profiili-APIa
VpnService on ollut olemassa Android 4.0:sta lähtien ja antaa sovelluksen luoda tun-rajapinnan ja sitten lukea ja kirjoittaa paketteja. Palvelu on ilmoitettava BIND_VPN_SERVICE:lla, ja VpnService.prepare() tuottaa järjestelmävalintaikkunan, joka pyytää käyttäjää sallimaan sen. Alustan esimerkki ToyVpn on selvin ilmaus tavoitellusta muodosta: koodisi omistaa rajapinnan ja kaiken, mikä sen läpi virtaa.
Mitä se ei tee, on kirjauksen lisääminen järjestelmän VPN-asetusnäytölle. Siihen ei ole julkista APIa, ja Asetukset-sovellus pitää profiilinsa varastossa, johon tavallinen sovellus ei pääse. Piilotettujen luokkien kutsut tavallisesta sovelluksesta tuottavat profiileja, joita järjestelmä ei koskaan listaa, minkä vuoksi koodi, joka näytti toimivan yhdessä buildissa, lakkaa hiljaa toimimasta seuraavassa.
Hallittu polku on erillinen. Laitteen omistaja tai profiilin omistaja voi määrittää aina päällä olevan VPN-paketin laitteen käytäntö-APIen kautta, ja yritystyökalu voi lähettää profiilin, jonka käyttäjä sitten hyväksyy. Se on laitehallintavaltaa, ei käyttöoikeus, jota sovellus pyytää asennuksen yhteydessä. Jos asiakkaasi on organisaatio, tämä on se polku, jota varten kannattaa suunnitella; jos asiakkaasi on henkilö, joka asentaa kaupasta, sitä ei ole lainkaan saatavilla.
iOS: oikeus on raja
iOS jakaa saman työn toisin. VPN-asiakas toteuttaa pakettitunnelin tarjoajan tai sovellusvälityspalvelimen Network Extension -kehyksessä, ja vastaava oikeus on myönnettävä kehittäjätilille. Henkilökohtainen VPN-määritys NEVPNManager:n kautta on olemassa yksinkertaisempaa tapausta varten, ja se toimii edelleen samassa lupamallissa. Apple dokumentoi koko pinnan Network Extension -viitteessä, joka kannattaa lukea ennen työn rajaamista.
Ei ole tuettua tapaa avata VPN-asetusnäyttöä, lukea käyttäjän tallennettuja määrityksiä tai käynnistää yhtä niistä. Asiakas voi lähettää määritysprofiilin, jonka käyttäjä asentaa, ja käyttää sitten syntynyttä tunnelia tavallisilla verkkokutsuilla. Sovelluskohtaisen tunnelin määrittää MDM-palvelin kysyntäperusteisella säännöllä, ei sovellus valitse sitä ajon aikana.
Suuren toimittajan VPN-asiakas ei ole todiste siitä, että tilisi voi lähettää saman. Ne oikeudet pyydetään kehittäjätileittäin ja ne tarkistetaan, joten aikatauluriski on Applella, ei sprinttisuunnitelmassasi.
Työpöytä yltää pidemmälle, mutta omistajuus ei muutu
Windows on salliva tapaus. Add-VpnConnection luo puhelinluettelomerkinnän korotetusta PowerShell-istunnosta, ja rasdial yhdistää tai katkaisee sen skriptistä. Sovellus voi myös ohjata toimittajan asiakasohjelmaa sen dokumentoidun komentorivin kautta. Profiilin luominen on edelleen hallinnollinen toimi, koska merkintä elää koneenlaajuisessa varastossa.
macOS käyttäytyy samoin eri työkaluilla. scutil --nc start ja stop toimivat palveluilla, jotka ovat jo olemassa, kun taas sellaisen luominen on järjestelmänhallintatehtävä. Prosessin omistaminen kannettavassa ei tee sinusta määrityksen omistajaa.
Mitä rakentaa sen sijaan
Jos todellinen vaatimus on, että sovelluksesi tavoittaa sisäisen APIn, käyttäjän jo käynnissä pitämä tunneli riittää. Lähetä tavallisia HTTPS-pyyntöjä, anna järjestelmän valita polku, ja lopeta tunnelin hallitsemisen yrittäminen. Jos vaatimus on, että vain sovelluksesi liikenne käyttää tunnelia, pyydä sovelluskohtaista VPN:ää hallintakanavan kautta tai päätä TLS sovelluksen sisällä palveluun, joka on saatavilla ilman sitä.
Piilotetut APIt eivät ole oikotie, jonka kannattaa ottaa. Ne muuttuvat julkaisujen välillä, ne epäonnistuvat sovellustarkistuksessa, ja viat, joita ne tuottavat, näyttävät koodin perivälle tavallisilta verkkovioilta. Vertailu ei ole Android vastaan iOS; se on tunnelin omistaminen vastaan pyyntö alustalle reitittää liikenne, ja vain ensimmäinen on sinun rakennettavaksesi.