Namestite profil, tunel se dvigne in vse je videti končano. Nato se telefon znova zažene, on-demand prebudi povezavo brez aplikacije v ospredju in tunel noče začeti. Profil je še vedno tam in geslo je še vedno pravilno, zato ta napaka pošilja ljudi iskat na napačno mesto. Network Extension ne more prebrati vaše skrivnosti iz profila: potrebuje sklic v zbirki ključev, ki ga lahko reši sama.

Spodnji pregled sledi enemu poskusu povezave skozi to predajo, od poizvedbe, ki zgradi sklic, do ponovnega zagona, ki ga preizkusi.

Profil shrani ročaj, ne skrivnosti

NEVPNProtocol izpostavi passwordReference in sharedSecretReference z razlogom. Ko demon zažene tunel, morda ne teče v vašem procesu, zato ne more poklicati vaše kode in prositi za geslo. Prebere trajni sklic v zbirki ključev, ga reši v svojem kontekstu in element prinese sam.

Ta sklic zgradite tako, da zanj vprašate zbirko ključev, kar je druga zahteva kot zahteva po podatkih:

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
]

Vrnjeni objekt predajte protokolu, ne podatkov elementa. V praksi profil zapiše, kje skrivnost živi, zato varnostna kopija konfiguracije ne podvoji gesla tiho v plist.

Zakaj API odgovori -50

errSecParam pomeni, da sta bila zahteva ali vrednost za to operacijo napačno oblikovana, in to je napaka, ki jo vidite najpogosteje, ko se zahteve po sklicu in podatkih pomešajo. Zahteva po podatkih, ko koda, ki prejema, pričakuje sklic, dodeljevanje surovih bajtov polju passwordReference ali poizvedba s skupino dostopa, ki je aplikacija ne more uporabiti, vse to jo ustvari.

Ovojne knjižnice k temu vabijo. Pomočnik, ki vrača bajte, ni zamenljiv s tistim, ki vrača sklic, zato je popravek običajno druga poizvedba in ne drugo geslo.

Isto neskladje pojasni profil, ki se shrani brez pritožbe in se nato ne poveže: shranjeno je blob, ne ročaj, in demon nima česa rešiti.

Shrani se dobro, spodleti pri povezovanju

Shranjevanje uri kontekst vaše aplikacije. Povezovanje uri kontekst demona in oba nimata enakega dostopa. Profil zato lahko prestane vse preizkuse v simulatorju in spodleti pri prvem zagonu on-demand.

Takšna je tudi oblika simptoma ob ponovnem zagonu: deluje, dokler je aplikacija odprta, in umre, ko sistem sam zažene tunel.

Pot v ozadju namerno preizkusite pred izdajo. Sprožite povezavo on-demand z zaprto aplikacijo, nato berite konzolo naprave, ne dnevnika aplikacije, ker napako zapiše proces, ki je poskušal rešiti sklic. Če konzola pokaže, da demon element zavrača, je sklic v redu in težava je dostopnost elementa.

Dostopnost odloči, ali bo ponovni zagon deloval

Element mora biti berljiv za kateri koli sistemski proces, ki zažene tunel, in to je širše občinstvo kot vaša aplikacija v ospredju. Ta omejitev za vas izbere atribut dostopnosti. Element, zaščiten do prve odklenitve, je na voljo za zagon v ozadju, potem ko je bila naprava enkrat odklenjena; element, ki zahteva, da je naprava odklenjena zdaj, ni.

Izbira strožjega razreda je mamljiva in prav ta pokvari profil on-demand na zaklenjenem telefonu.

Po spremembi razreda element znova ustvarite, namesto da urejate atribute na obstoječem, in nato protokol znova shranite s svežim sklicem. Spremembe atributov na obstoječem elementu ne dajo vedno vedenja, ki ga dokumentacija nakazuje, in znova zgrajen element odpravi dvom.

Rotacija je tam, kjer shranjeni profili gnijejo

Sprememba gesla v zbirki ključev samodejno ne spremeni tega, na kar kaže shranjeni profil. Brisanje elementa je slabše: profil drži sklic na nekaj, česar ni več, in napaka je videti kot zavrnitev preverjanja pristnosti.

Vrtite v enem vrstnem redu. Posodobite element, poizvejte po novem trajnem sklicu, znova shranite protokol in se nato povežite z zaprto aplikacijo, da dokažete, da ga demon še vedno lahko reši. Uporabniško geslo in skupno skrivnost hranite v ločenih elementih, da se vsako vrti po svojem urniku, in nikoli ne beležite slovarja poizvedbe ali samega sklica. Ročaj ni skrivnost, je pa zemljevid do nje.

Sorodni članki