iOS VPN պրոֆիլ. passwordReference, ոչ թե գաղտնաբառը
Բանալիների շղթայի հղումը բռնակ է, ոչ թե գաղտնիքը։ Բայթերի փոխանցումը բացատրում է -50 սխալը, վերագործարկման ձախողումը և պտտման թակարդը պահված VPN պրոֆիլներում։
Դուք տեղադրում եք պրոֆիլ, թունելը բարձրանում է, և ամեն ինչ ավարտված է թվում։ Հետո հեռախոսը վերագործարկվում է, on-demand-ը արթնացնում է կապը՝ առանց առաջին պլանում հավելվածի, և թունելը հրաժարվում է սկսել։ Պրոֆիլը դեռ այնտեղ է, և գաղտնաբառը դեռ ճիշտ է, դրա համար է, որ այս ձախողումը մարդկանց ուղարկում է սխալ տեղ փնտրելու։ Network Extension-ը չի կարող ձեր գաղտնիքը կարդալ պրոֆիլից. նրան պետք է բանալիների շղթայի հղում, որը նա ինքը կարող է լուծել։
Ստորև տրված ուղեցույցը հետևում է մեկ կապի փորձի այդ փոխանցման միջով՝ հղումը կառուցող հարցումից մինչև այն փորձարկող վերագործարկումը։
Պրոֆիլը պահում է բռնակ, ոչ թե գաղտնիքը
NEVPNProtocol-ը բացում է passwordReference-ը և sharedSecretReference-ը որոշակի պատճառով։ Երբ դեմոնը սկսում է թունել, այն կարող է չաշխատել ձեր պրոցեսի ներսում, ուստի չի կարող կանչել ձեր կոդը և գաղտնաբառ խնդրել։ Այն կարդում է մշտական հղում բանալիների շղթայից, լուծում այն իր համատեքստում և ինքն է վերցնում տարրը։
Դուք կառուցում եք այդ հղումը՝ հարցնելով այն բանալիների շղթայից, ինչը տարբեր հարցում է տվյալներ խնդրելուց.
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
]Վերադարձված օբյեկտը տվեք պրոտոկոլին, ոչ թե տարրի տվյալները։ Գործնականում պրոֆիլը գրանցում է, թե որտեղ է ապրում գաղտնիքը, դրա համար էլ կազմաձևի պահուստը լուռ չի կրկնօրինակում գաղտնաբառը plist-ում։
Ինչու API-ն պատասխանում է -50
errSecParam-ը նշանակում է, որ հարցումը կամ արժեքը սխալ ձևավորված էին այդ գործողության համար, և դա այն սխալն է, որ ամենահաճախն է երևում, երբ հղման և տվյալների հարցումները խառնվում են։ Տվյալներ խնդրելը, երբ ընդունող կոդը սպասում է հղման, հում բայթեր վերագրելը passwordReference-ին, կամ հարցումը հասանելիության խմբով, որը հավելվածը չի կարող օգտագործել, բոլորը արտադրում են այն։
Փաթաթող գրադարանները հրավիրում են դրան։ Բայթեր վերադարձնող օգնականը փոխարինելի չէ հղում վերադարձնողի հետ, ուստի վերանորոգումը սովորաբար այլ հարցում է, ոչ թե այլ գաղտնաբառ։
Նույն անհամապատասխանությունը բացատրում է պրոֆիլ, որը պահվում է առանց բողոքի և հետո չի միանում. պահվածը blob է, ոչ թե բռնակ, և դեմոնը լուծելու բան չունի։
Լավ է պահվում, ձախողվում է միացման պահին
Պահումը վարժեցնում է ձեր հավելվածի համատեքստը։ Միացումը վարժեցնում է դեմոնինը, և երկուսն էլ նույն հասանելիությունը չունեն։ Այդ պատճառով պրոֆիլը կարող է անցնել սիմուլյատորում արված բոլոր թեստերը և ձախողվել առաջին on-demand մեկնարկին։
Վերագործարկման ախտանիշի ձևը նույնն է. այն աշխատում է, քանի դեռ հավելվածը բաց է, և մահանում է, երբ համակարգը ինքն է սկսում թունելը։
Փորձարկեք ֆոնային ուղին դիտավորյալ մինչև թողարկումը։ Գործարկեք on-demand կապ փակ հավելվածով, ապա կարդացեք սարքի կոնսոլը, ոչ թե հավելվածի մատյանը, որովհետև ձախողումը գրանցում է այն պրոցեսը, որը փորձել է լուծել հղումը։ Եթե կոնսոլը ցույց է տալիս, որ դեմոնը մերժում է տարրը, հղումը նորմալ է, և խնդիրը տարրի հասանելիությունն է։
Հասանելիությունը որոշում է՝ վերագործարկումը կաշխատի
Տարրը պետք է ընթեռնելի լինի ցանկացած համակարգային պրոցեսի համար, որը սկսում է թունելը, և դա ավելի լայն լսարան է, քան ձեր հավելվածը առաջին պլանում։ Այդ սահմանափակումն ինքն է ընտրում հասանելիության հատկանիշը ձեզ համար։ Մինչև առաջին բացումը պաշտպանված տարրը հասանելի է ֆոնային մեկնարկին այն բանից հետո, երբ սարքը մեկ անգամ բացվել է. տարրը, որը պահանջում է, որ սարքը հենց հիմա բաց լինի, հասանելի չէ։
Ավելի խիստ դասն ընտրելը գայթակղիչ է, և հենց դա է կոտրում on-demand պրոֆիլը կողպված հեռախոսում։
Դասը փոխելուց հետո վերստեղծեք տարրը՝ գոյություն ունեցողի հատկանիշները խմբագրելու փոխարեն, ապա նորից պահեք պրոտոկոլը թարմ հղումով։ Գոյություն ունեցող տարրի հատկանիշների փոփոխությունները միշտ չէ, որ տալիս են այն վարքը, որը ենթադրում է փաստաթուղթը, իսկ վերակառուցված տարրը վերացնում է կասկածը։
Պտտումը այն տեղն է, որտեղ պահված պրոֆիլները փտում են
Բանալիների շղթայում գաղտնաբառը փոխելը ինքնաբերաբար չի փոխում այն, ինչին ուղղված է պահված պրոֆիլը։ Տարրը ջնջելը ավելի վատ է. պրոֆիլը պահում է հղում մի բանի, որ այլևս չկա, և ձախողումը նմանվում է նույնականացման մերժման։
Պտտեք մեկ հերթականությամբ։ Թարմացրեք տարրը, հարցրեք նոր մշտական հղում, նորից պահեք պրոտոկոլը, ապա միացեք փակ հավելվածով՝ ապացուցելու, որ դեմոնը դեռ կարող է լուծել այն։ Պահեք օգտվողի գաղտնաբառը և ընդհանուր գաղտնիքը առանձին տարրերում, որպեսզի յուրաքանչյուրը պտտվի իր ժամանակացույցով, և երբեք չգրանցեք հարցման բառարանը կամ հենց հղումը։ Բռնակը գաղտնիք չէ, բայց քարտեզ է դեպի այն։