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 профильді бұзады.
Сыныпты өзгерткеннен кейін бар элементтің атрибуттарын өңдеудің орнына элементті қайта жасаңыз, содан кейін протоколды жаңа сілтемемен қайта сақтаңыз. Бар элементтегі атрибут өзгерістері құжаттама меңзеген мінез-құлықты әрдайым бермейді, ал қайта құрылған элемент күмәнді жояды.
Айналдыру — сақталған профильдер шіриді
Кілттер буынындағы құпиясөзді өзгерту сақталған профиль нұсқайтын нәрсені автоматты түрде өзгертпейді. Элементті жою одан да нашар: профиль енді жоқ нәрсеге сілтеме ұстайды, ал ақау аутентификациядан бас тарту сияқты көрінеді.
Бір ретпен айналдырыңыз. Элементті жаңартыңыз, жаңа тұрақты сілтемені сұраңыз, протоколды қайта сақтаңыз, содан кейін қолданба жабық күйде қосылып, демон оны әлі де шеше алатынын дәлелдеңіз. Пайдаланушы құпиясөзі мен ортақ құпияны бөлек элементтерде ұстаңыз, сонда әрқайсысы өз кестесімен айналады, және сұрау сөздігін немесе сілтеменің өзін ешқашан журналға жазбаңыз. Тұтқа құпия емес, бірақ оған апаратын карта.