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 కు ముడి బైట్లను కేటాయించడం, లేదా యాప్ ఉపయోగించలేని యాక్సెస్ గ్రూప్తో క్వెరీ చేయడం, అన్నీ దాన్ని ఉత్పత్తి చేస్తాయి.
ర్యాపర్ లైబ్రరీలు దీనికి ఆహ్వానిస్తాయి. బైట్లను తిరిగి ఇచ్చే సహాయకుడు సూచనను తిరిగి ఇచ్చే దానితో మార్చుకోలేము, కాబట్టి సరిదిద్దడం సాధారణంగా మరో పాస్వర్డ్ కాదు, మరో క్వెరీ.
అదే అసమానత ఫిర్యాదు లేకుండా నిల్వ చేయబడి తర్వాత కనెక్ట్ కాని ప్రొఫైల్ను వివరిస్తుంది: నిల్వ చేసినది బ్లాబ్, హ్యాండిల్ కాదు, డీమన్కు పరిష్కరించడానికి ఏమీ లేదు.
బాగా నిల్వ అవుతుంది, కనెక్ట్ అయ్యేటప్పుడు విఫలమవుతుంది
నిల్వ మీ యాప్ సందర్భాన్ని వ్యాయామం చేస్తుంది. కనెక్ట్ కావడం డీమన్ దాన్ని, రెండింటికీ ఒకే ప్రవేశం లేదు. కాబట్టి ప్రొఫైల్ సిమ్యులేటర్లో చేసిన ప్రతి పరీక్షను దాటి మొదటి on-demand ప్రారంభంలో విఫలం కావచ్చు.
రీబూట్ లక్షణం ఆకారం కూడా అదే: యాప్ తెరిచి ఉన్నంతసేపు పని చేస్తుంది, సిస్టమ్ తానే టన్నెల్ ప్రారంభించినప్పుడు చనిపోతుంది.
పంపే ముందు బ్యాక్గ్రౌండ్ మార్గాన్ని ఉద్దేశపూర్వకంగా పరీక్షించండి. యాప్ మూసి ఉండగా on-demand కనెక్షన్ను రేకెత్తించి, తర్వాత యాప్ లాగ్ కాదు, పరికరం కన్సోల్ను చదవండి, ఎందుకంటే వైఫల్యాన్ని సూచనను పరిష్కరించడానికి ప్రయత్నించిన ప్రాసెసే నమోదు చేస్తుంది. కన్సోల్ డీమన్ అంశాన్ని తిరస్కరిస్తున్నట్లు చూపిస్తే, సూచన సరైనది, సమస్య అంశం యొక్క ప్రాప్యత.
రీబూట్ పని చేస్తుందో లేదో ప్రాప్యత నిర్ణయిస్తుంది
టన్నెల్ ప్రారంభించే ఏ సిస్టమ్ ప్రాసెస్కైనా అంశం చదవగలిగి ఉండాలి, యాప్ ముందు ఉన్నప్పటి కంటే ఇది విస్తృత ప్రేక్షకులు. ఆ పరిమితి మీ కోసం ప్రాప్యత లక్షణాన్ని ఎంచుకుంటుంది. మొదటి అన్లాక్ వరకు రక్షించబడిన అంశం పరికరం ఒకసారి అన్లాక్ అయిన తర్వాత బ్యాక్గ్రౌండ్ ప్రారంభానికి అందుబాటులో ఉంటుంది; పరికరం ఇప్పుడే అన్లాక్ ఉండాలని కోరే అంశం అందుబాటులో ఉండదు.
కఠినమైన తరగతిని ఎంచుకోవడం ఆకర్షణీయం, లాక్ చేసిన ఫోన్లో on-demand ప్రొఫైల్ను విచ్ఛిన్నం చేసేది అదే.
తరగతి మార్చిన తర్వాత ఉన్న అంశం యొక్క లక్షణాలను సవరించకుండా అంశాన్ని మళ్లీ సృష్టించి, తర్వాత కొత్త సూచనతో ప్రోటోకాల్ను మళ్లీ నిల్వ చేయండి. ఉన్న అంశంపై లక్షణ మార్పులు డాక్యుమెంటేషన్ సూచించే ప్రవర్తనను ఎల్లప్పుడూ ఇవ్వవు, మళ్లీ నిర్మించిన అంశం సందేహాన్ని తొలగిస్తుంది.
రొటేషన్ అంటే నిల్వ చేసిన ప్రొఫైల్స్ కుళ్ళిపోయే చోటు
కీచైన్లో పాస్వర్డ్ మార్చడం నిల్వ చేసిన ప్రొఫైల్ ఏది సూచిస్తుందో స్వయంచాలకంగా మార్చదు. అంశాన్ని తొలగించడం మరింత దారుణం: ప్రొఫైల్ ఇప్పుడు లేని దానికి సూచనను ఉంచుకుంటుంది, వైఫల్యం ప్రామాణీకరణ తిరస్కరణలా కనిపిస్తుంది.
ఒకే క్రమంలో రొటేట్ చేయండి. అంశాన్ని నవీకరించి, కొత్త శాశ్వత సూచనను క్వెరీ చేయండి, ప్రోటోకాల్ను మళ్లీ నిల్వ చేయండి, తర్వాత యాప్ మూసి ఉండగా కనెక్ట్ అయి డీమన్ ఇంకా దాన్ని పరిష్కరించగలదని నిరూపించండి. వినియోగదారు పాస్వర్డ్ మరియు పంచుకున్న రహస్యాన్ని వేర్వేరు అంశాల్లో ఉంచండి, ప్రతి ఒక్కటి తన షెడ్యూల్ ప్రకారం తిరుగుతుంది, మరియు క్వెరీ నిఘంటువును లేదా సూచనను ఎప్పుడూ లాగ్ చేయవద్దు. హ్యాండిల్ రహస్యం కాదు, కానీ దానికి దారి చూపే మ్యాప్.