iOS-i VPN-profiil: passwordReference, mitte parool
Võtmehoidla viide on käepide, mitte saladus. Baitide edastamine selgitab viga -50, taaskäivituse tõrget ja rotatsioonilõksu salvestatud VPN-profiilides.
Paigaldad profiili, tunnel tõuseb ja kõik näib valmis. Siis telefon taaskäivitub, on-demand äratab ühenduse ilma rakenduseta esiplaanil ja tunnel keeldub käivitumast. Profiil on endiselt alles ja parool endiselt õige, seepärast saadab see tõrge inimesi valesse kohta otsima. Network Extension ei saa sinu saladust profiilist lugeda: tal on vaja võtmehoidla viidet, mille ta suudab ise lahendada.
Alljärgnev ülevaade jälgib ühte ühendusekatset läbi selle üleandmise, viidet ehitavast päringust kuni taaskäivituseni, mis seda kontrollib.
Profiil hoiab käepidet, mitte saladust
NEVPNProtocol paljastab passwordReference ja sharedSecretReference põhjusega. Kui deemon tunneli käivitab, ei pruugi ta töötada sinu protsessi sees, seega ei saa ta sinu koodi kutsuda ja parooli küsida. Ta loeb püsivat võtmehoidla viidet, lahendab selle oma kontekstis ja toob üksuse ise.
Sa ehitad selle viite, küsides seda võtmehoidlast, mis on teistsugune päring kui andmete küsimine:
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
]Anna tagastatud objekt protokollile, mitte üksuse andmed. Praktikas märgib profiil, kus saladus elab, seepärast ei dubleeri konfiguratsiooni varukoopia parooli vaikselt plist-faili.
Miks API vastab -50
errSecParam tähendab, et päring või väärtus oli toimingu jaoks vigaselt vormistatud, ja see on viga, mida näeb kõige sagedamini siis, kui viite- ja andmepäringud segunevad. Andmete küsimine, kui vastuvõttev kood ootab viidet, toorbaitide omistamine passwordReference väljale või päring juurdepääsugrupiga, mida rakendus kasutada ei saa, tekitavad selle kõik.
Mähiskirjandused kutsuvad sellele. Baite tagastav abiline ei ole vahetatav viidet tagastavaga, seega on parandus tavaliselt teine päring, mitte teine parool.
Sama lahknevus selgitab profiili, mis salvestub nurinata ja seejärel ei ühendu: salvestatu on blob, mitte käepide, ja deemonil pole midagi lahendada.
Salvestub hästi, ebaõnnestub ühendamisel
Salvestamine teostab sinu rakenduse konteksti. Ühendamine teostab deemonni oma, ja kahel pole sama juurdepääsu. Profiil võib seega läbida kõik simulaatoris tehtud testid ja ebaõnnestuda esimesel on-demand käivitusel.
Sama kuju on ka taaskäivituse sümptomil: see töötab, kuni rakendus on avatud, ja sureb, kui süsteem tunneli ise käivitab.
Testi taustateed sihilikult enne väljastamist. Käivita on-demand ühendus suletud rakendusega, seejärel loe seadme konsooli, mitte rakenduse logi, sest tõrke registreerib protsess, mis üritas viidet lahendada. Kui konsool näitab, et deemon lükkab üksuse tagasi, on viide korras ja probleem on üksuse juurdepääsetavuses.
Juurdepääsetavus otsustab, kas taaskäivitus töötab
Üksus peab olema loetav iga süsteemiprotsessi jaoks, mis tunneli käivitab, ja see on laiem publik kui sinu rakendus esiplaanil. See piirang valib juurdepääsetavuse atribuudi sinu eest. Üksus, mis on kaitstud kuni esimese avamiseni, on taustakäivitusele kättesaadav pärast seda, kui seade on ühe korra avatud; üksus, mis nõuab, et seade oleks praegu avatud, ei ole.
Rangema klassi valimine on ahvatlev ja täpselt see rikub on-demand profiili lukustatud telefonis.
Pärast klassi muutmist loo üksus uuesti, selle asemel et muuta olemasoleva atribuute, ja salvesta protokoll seejärel värske viitega uuesti. Atribuudimuudatused olemasoleval üksusel ei anna alati dokumentatsiooni vihjatud käitumist, ja uuesti loodud üksus kõrvaldab kahtluse.
Rotatsioon on koht, kus salvestatud profiilid mädanema lähevad
Parooli muutmine võtmehoidlas ei muuda automaatselt seda, millele salvestatud profiil osutab. Üksuse kustutamine on hullem: profiil hoiab viidet millelegi, mida enam ei ole, ja tõrge näib autentimise tagasilükkamisena.
Pööra ühes järjekorras. Uuenda üksust, küsi uus püsiv viide, salvesta protokoll uuesti, seejärel ühendu suletud rakendusega, et tõestada, et deemon suudab selle endiselt lahendada. Hoia kasutaja parool ja jagatud saladus eraldi üksustes, et kumbki pöörleks oma ajakava järgi, ja ära kunagi logi päringu sõnastikku ega viidet ennast. Käepide ei ole saladus, aga see on kaart selle juurde.