Wat NEVPNManager op iOS meitsje kin (en wat net)
De iOS VPN-API bout ien konfiguraasje yn eigendom fan ’e app út trije protokolklassen. L2TP, PPTP en ûndertekene profilen hearre net by dat oerflak.
As jo in VPN-skerm yn in iOS-app bouwe, is de earste ferrassing dat de protokol-list fan ’e Ynstellings-app net de API-list is. It Network Extension-framework lit jo app ien persoanlike VPN-konfiguraasje meitsje, eigendom fan dy app, en it akseptearret mar in pear protokol-objekten. Al it oare dat minsken ferwachtsje, fan L2TP oant in downloadt profyl, leit bûten dat oerflak of is partikulier fan Apple. De mislearrings dy’t folgje binne meastentiids gjin bugs, it is de API dy’t in taak wegeret dy’t er nea krigen hat.
De myte: de API is in Ynstellings-bewurker
Men leaut dat, om’t iOS IKEv1-, IKEv2-, L2TP- en IPsec-profilen konfigurearje kin, in app elk dêrfan programmatysk meitsje kin. Dat kin net. It framework jout de oanroppende app krekt ien konfiguraasjeplak, en dat plak akseptearret in lytse set publike protokolklassen. Al it oare dat minsken ferwachtsje, fan L2TP oant in downloadt profyl, leit bûten dat oerflak of is partikulier fan Apple.
De mislearrings dy’t folgje binne meastentiids gjin bugs. It is de API dy’t in taak wegeret dy’t er nea krigen hat, en de oplossing is it skerm te ûntwerpen rûn wat de API besit.
Trije protokol-objekten en dy’t net besteane
Jo opsjes binne IKEv1 fia NEVPNProtocolIPSec, IKEv2 fia NEVPNProtocolIKEv2, en NETunnelProviderProtocol as jo jo eigen pakkettunnel-útwreiding leverje. De NEVPNManager-referinsje listet de akseptearre protokol-objekten op. L2TP en PPTP komme nea yn dy list foar, om’t Apple gjin klassen foar har publisearre hat. Ien fan beide besykje einiget by it bewarjen mei in flater, of slimmer, mei in konfiguraasje dy’t it systeem stilwei wegeret te brûken.
Desktopkoade folget oare regels. Op macOS steapelt SCNetworkInterfaceCreateWithInterface in ynterfacetype lykas L2TP oer IPv4 en ferbynt it oan in netwurktsjinst, en networksetup -connectpppoeservice start it resultaat. Administratorrjochten en in helptool binne nedich, om’t it dielde geheim en it wachtwurd yn ’e systeemkaaihingst geane. Kopiearje dat ûntwerp nei iOS en neat kompilearret.
Jou in kaaihingstferwizing troch, net it wachtwurd
Gjin fan beide IKE-klassen akseptearret in wachtwurd as tekst. De twa eigenskippen passwordReference en sharedSecretReference wolle in persistinte kaaihingstferwizing, dy’t jo fan SecItemCopyMatching krije troch kSecReturnPersistentRef te freegjen. It trochjaan fan ’e itemgegevens, of in tekenrige yn it fjild triuwe, produsearret in bewarflater of in ferbining mei lege ynloggegevens. De ferwizing is mar like duorsum as it kaaihingstitem derachter, dêrom moat it item bestean foardat de konfiguraasje gearstald wurdt. Meitsje it yn deselde transaksje as it bewarjen en jo ferwiderje in hiele klasse fan oarderingsbugs.
Sertifikaatautentikaasje nimt in oare rûte: identityData plus identityDataPassword foar in PKCS#12-blob. Dat blob yn ’e app-bundle leverje is in gewoante út ’e foarbyldkoade, net in leveringsbeslút, om’t it wachtwurd mei reizget en elke kopy fan ’e app deselde identiteit draacht.
Rjocht en beskikberens bepale alles
De behearder bestiet miskien hielendal net, en de reden is provisioning. Jo app-identifiers hawwe de Network Extension-kaart en it rjocht foar persoanlike VPN nedich, en it profyl dat de build ûndertekenet moat beide drage.
Sla dat oer en de dielde ynstânsje jout nil werom, of it bewarjen mislearret mei in flater dy’t nea it rjocht neamt. Beskikberens is de oare poarte. Rjochtsje op wat âlder is as iOS 8 en it symboal ûntbrekt by runtime, dus de mislearring is in crash of in nil-behearder, net in behearder sûnder konfiguraasje. Kontrolearje de runtime en it rjocht foardat jo jo objektgraaf debugge.
Laad, wizigje, bewarje en besjoch dan de folchoarder op oanfraach
Behannelje de libbenssyklus as laad, wizigje, bewarje, en slach nea it laadjen oer. Oant loadFromPreferences foltôge is, hâldt de behearder neat en kin it protokol-objekt net lêzen of ferwiksele wurde.
In twadde bewarjen ferfangt de konfiguraasje ynstee fan in oare ta te foegjen, dus in healôffre bewarjen kin in profyl skea dwaan dat wurke. Regels op oanfraach foarmje in oardere array, en dy folchoarder is it belied. Set in ferbyn-oeral-regel foar de ferbrekingsregel en op in hânmjittige ferbrekking folget in direkte werferbining, wat as in defekt liket mar de dokumintearre evaluaasje folget.
Ferpleats de ferbrekingsregel nei foaren as de aksje fan ’e brûker winne moat. Wat bûten de kontrôle fan ’e app bliuwt, is like wichtich. Rûtes komme fan ’e tunnel of it tsjinnerbelied, net fan in foarkar dy’t jo ynstelle, wêrby’t in pakkettunnelprovider se rapportearret as er start. De app kin profilen dy’t troch oare apps of konfiguraasjeprofilen ynstalleare binne net listje of bewurkje, dus beloof gjin skerm dat elke VPN op it apparaat sjen lit.