Dir installéiert e Profil, den Tunnel kënnt erop, an alles gesäit fäerdeg aus. Duerno start de Telefon nei, on-demand erwächt d’Verbindung ouni App am Virdergrond, an den Tunnel refuséiert ze starten. De Profil ass nach do an d’Passwuert ass nach richteg, dofir schéckt dëse Fehler d’Leit op der falscher Plaz sichen. Eng Network Extension kann Äert Geheimnis net aus dem Profil liesen: si brauch eng Keychain-Referenz, déi si selwer opléise kann.

Den Duerchgang hei drënner verfollegt een eenzegen Uschlossversuch duerch déi Iwwergabe, vun der Ufro, déi d’Referenz baut, bis zum Neistart, deen se test.

De Profil späichert e Grëff, net de Geheimnis

NEVPNProtocol setzt passwordReference an sharedSecretReference aus engem Grond aus. Wann den Daemon en Tunnel start, leeft en vläicht net an Ärem Prozess, also kann en Äre Code net ruffen an no engem Passwuert froen. En liest eng dauerhaft Keychain-Referenz, léist se a sengem eegene Kontext op an hëlt den Element selwer.

Dir baut déi Referenz, andeems Dir d’Keychain drun freet, wat eng aner Ufro ass wéi déi no den Donnéeën:

let query: [String: Any] = [
  kSecClass as String: kSecClassGenericPassword,
  kSecAttrService as String: "vpn-credentials",
  kSecAttrAccount as String: "user",
  kSecReturnPersistentRef as String: true,
  kSecMatchLimit as String: kSecMatchLimitOne
]

Gitt dat zréckkritt Objet un de Protokoll, net d’Donnéeë vum Element. An der Praxis hält de Profil fest, wou de Geheimnis wunnt, an dofir duplizéiert eng Sécherung vun der Konfiguratioun d’Passwuert net stëll an eng plist.

Firwat d’API -50 äntwert

errSecParam bedeit, datt d’Ufro oder de Wäert fir d’Operatioun falsch geformt war, an dat ass dee Fehler, deen een am dackste gesäit, wann d’Ufroe fir Referenz an Donnéeën duerchernee geroden. Donnéeë froen, während de Code, deen empfaangen, eng Referenz erwaart, roh Byte passwordReference zouweisen oder mat enger Zougrëffsgrupp ufroen, déi d’App net benotze kann, all bréngen en ervir.

Wrapper-Bibliothèiken invitéieren dozou. En Hëllefsfunktioun, déi Byte zréckgëtt, ass net mat enger austauschbar, déi eng Referenz zréckgëtt, dofir ass d’Reparatur meeschtens eng aner Ufro an net en anert Passwuert.

Déi selwecht Ongenauegkeet erkläert e Profil, deen ouni Klag gespäichert gëtt an duerno net verbënnt: dat Gespäichert ass en Blob, net e Grëff, an den Daemon huet näischt opzeléisen.

Späichert gutt, versot beim Verbannen

Späichere üübt de Kontext vun Ärer App. Verbannen üübt de vum Daemon, an déi zwee hunn net dee selwechten Zougrëff. E Profil kann dofir all Test am Simulateur bestoen an um éischten on-demand Start versoen.

Dat ass och d’Form vum Neistart-Symptom: et funktionéiert, soulaang d’App op ass, an et stierft, wann de System den Tunnel selwer start.

Test de Virdergrondwee bewosst virum Ausliwweren. Léis eng on-demand Verbindung aus mat zouener App, da lies d’Konsole vum Apparat an net de Log vun der App, well de Fehler gëtt vum Prozess opgeholl, deen d’Referenz ze opléise versicht huet. Wann d’Konsole weist, datt den Daemon den Element refuséiert, ass d’Referenz gutt an de Problem ass d’Accessibilitéit vum Element.

D’Accessibilitéit entscheet, ob en Neistart funktionéiert

Den Element muss vun all Systemprozess liesbar sinn, deen den Tunnel start, an dat ass eng méi breet Publikum wéi Är App am Virdergrond. Déi Aschränkung wielt d’Accessibilitéitsattribut fir Iech. En Element, deen bis zum éischten Opmaachen geschützt ass, ass fir en Hannergrondstart disponibel, nodeems den Apparat eng Kéier opgemaach gouf; en Element, deen erfuerdert, datt den Apparat just elo op ass, ass et net.

Déi méi streng Klass ze wielen ass verlockend an et ass just dat, wat en on-demand Profil op engem gespaerten Telefon zerbricht.

Nodeems Dir d’Klass geännert hutt, erstellt den Element nei, amplaz Attributer um existéierende ze änneren, a späichert da de Protokoll nach eng Kéier mat enger frëscher Referenz. Attributännerunge op engem existéierende Element produzéieren net ëmmer d’Verhalen, dat d’Dokumentatioun implizéiert, an en nei gebauten Element hëlt den Zweiwel ewech.

Rotatioun ass do, wou gespäichert Profiler verrotten

D’Passwuert an der Keychain ze änneren ännert net automatesch, wourop de gespäicherte Profil weist. Den Element ze läschen ass méi schlëmm: de Profil hält eng Referenz op eppes, wat net méi existéiert, an de Fehler gesäit aus wéi eng Oflehnung vun der Authentifikatioun.

Rotéiert an enger eenzeger Reihenfolge. Aktualiséiert den Element, freet eng nei dauerhaft Referenz of, späichert de Protokoll nach eng Kéier, a verbënnt da mat zouener App, fir ze beweisen, datt den Daemon se nach ëmmer opléise kann. Halt d’Benotzerpasswuert an de gedeelte Geheimnis an getrennten Elementer, sou datt all eenzel no sengem eegene Plang rotéiert, a loggt ni de Wierderbuch vun der Ufro oder d’Referenz selwer. De Grëff ass kee Geheimnis, awer en ass eng Kaart dohinner.

Ähnlech Artikelen