Ko v aplikaciji iOS gradite zaslon VPN, je prvo presenečenje, da seznam protokolov v aplikaciji Nastavitve ni seznam API-ja. Ogrodje Network Extension omogoča vaši aplikaciji, da ustvari eno osebno konfiguracijo VPN, ki pripada tej aplikaciji, in sprejme le nekaj protokolskih objektov. Vse drugo, kar ljudje pričakujejo, od L2TP do prenesenega profila, je zunaj te površine ali je Applu zasebno. Napake, ki sledijo, običajno niso hrošči, API zavrača delo, ki ga nikoli ni prejel.

Mit: API je urejevalnik Nastavitev

Verjame se, da lahko aplikacija, ker iOS zna konfigurirati profile IKEv1, IKEv2, L2TP in IPsec, katerega koli od njih ustvari programsko. Ne more. Ogrodje izpostavi klicoči aplikaciji natanko eno mesto konfiguracije in to mesto sprejme le majhen nabor javnih razredov protokolov. Vse drugo, kar ljudje pričakujejo, od L2TP do prenesenega profila, je zunaj te površine ali je Applu zasebno.

Napake, ki sledijo, običajno niso hrošči. API zavrača delo, ki ga nikoli ni prejel, rešitev pa je zasnovati zaslon okoli tega, kar API ima.

Trije protokolski objekti in tisti, ki jih ni

Vaše možnosti so IKEv1 prek NEVPNProtocolIPSec, IKEv2 prek NEVPNProtocolIKEv2 in NETunnelProviderProtocol, če dobavljate lastno razširitev paketnega tunela. Referenca NEVPNManager navaja sprejete protokolske objekte. L2TP in PPTP se na tem seznamu nikoli ne pojavita, ker Apple zanju ni objavil razredov. Poskus katerega koli od njiju se ob shranjevanju konča z napako ali, še huje, s konfiguracijo, ki je sistem tiho noče uporabiti.

Namizna koda sledi drugim pravilom. V macOS SCNetworkInterfaceCreateWithInterface zloži vrsto vmesnika, na primer L2TP prek IPv4, in jo pripne k omrežni storitvi, networksetup -connectpppoeservice pa zažene rezultat. Potrebne so skrbniške pravice in pomožno orodje, ker skupna skrivnost in geslo prideta v sistemsko shrambo ključev. Kopirajte to zasnovo v iOS in nič se ne prevede.

Posredujte sklic na shrambo ključev, ne gesla

Noben od obeh razredov IKE ne sprejme gesla kot besedila. Dve lastnosti passwordReference in sharedSecretReference želita trajen sklic na shrambo ključev, ki ga dobite iz SecItemCopyMatching, ko zaprosite za kSecReturnPersistentRef. Posredovanje podatkov elementa ali vstavljanje niza v polje povzroči neuspeh shranjevanja ali povezavo s praznimi poverilnicami. Sklic je trajen le toliko, kolikor je element shrambe ključev za njim, zato mora element obstajati, preden je konfiguracija sestavljena. Ustvarite ga v isti transakciji kot shranjevanje in odpravite cel razred napak vrstnega reda.

Preverjanje pristnosti s potrdilom gre po drugi poti: identityData plus identityDataPassword za blob PKCS#12. Dostava tega bloba v paketu aplikacije je navada, podedovana iz vzorčne kode, ne odločitev o izdaji, ker geslo potuje z njim in vsaka kopija aplikacije nosi isto identiteto.

Pravica in razpoložljivost pogojujeta vse

Upravitelja morda sploh ni, razlog pa je zagotavljanje. Identifikator vaše aplikacije potrebuje zmožnost Network Extension skupaj s pravico za osebni VPN, profil, ki podpiše gradnjo, pa mora nositi oboje.

Če to preskočite, skupni primerek vrne nil ali shranjevanje spodleti z napako, ki nikoli ne omeni pravice. Razpoložljivost so druga vrata. Če ciljate na kaj starejšega od iOS 8, simbola v času izvajanja ni, zato je neuspeh sesutje ali nil upravitelj, ne upravitelj brez konfiguracije. Preverite izvajalno okolje in pravico, preden razhroščujete svoj graf objektov.

Naložite, spremenite, shranite in nato opazujte vrstni red na zahtevo

Življenjski cikel obravnavajte kot nalaganje, spreminjanje in shranjevanje in nikoli ne preskočite nalaganja. Dokler loadFromPreferences ni končan, upravitelj ničesar ne drži in protokolskega objekta ni mogoče brati ali zamenjati.

Drugo shranjevanje nadomesti konfiguracijo, namesto da bi dodalo še eno, zato lahko napol dokončano shranjevanje poškoduje profil, ki je deloval. Pravila na zahtevo tvorijo urejeno polje in ta vrstni red je politika. Postavite pravilo povezovanja od koder koli pred pravilo prekinitve in ročni prekinitvi sledi takojšnja ponovna povezava, kar je videti kot napaka, a sledi dokumentirani oceni.

Premaknite pravilo prekinitve naprej, ko mora dejanje uporabnika zmagati. Kar ostane zunaj nadzora aplikacije, je enako pomembno. Poti prihajajo iz tunela ali strežniške politike, ne iz nastavitve, ki jo določite vi, ponudnik paketnega tunela pa o njih poroča ob zagonu. Aplikacija ne more našteti ali urejati profilov, ki so jih namestile druge aplikacije ali konfiguracijski profili, zato ne obljubite zaslona, ki prikazuje vsak VPN v napravi.

Sorodni članki