আপনি একটি প্রোফাইল ইনস্টল করেন, টানেল উঠে আসে, আর সবকিছু শেষ মনে হয়। তারপর ফোন রিবুট হয়, 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 প্রোফাইল ভাঙে।

শ্রেণি বদলানোর পর বিদ্যমান আইটেমের অ্যাট্রিবিউট সম্পাদনা না করে আইটেমটি নতুন করে তৈরি করুন, তারপর নতুন রেফারেন্স দিয়ে প্রোটোকল আবার সংরক্ষণ করুন। বিদ্যমান আইটেমে অ্যাট্রিবিউট পরিবর্তন সবসময় ডকুমেন্টেশন যা বোঝায় সেই আচরণ দেয় না, আর নতুন করে তৈরি আইটেম সন্দেহ দূর করে।

রোটেশনই সেই জায়গা যেখানে সংরক্ষিত প্রোফাইল পচে

কি-চেইনে পাসওয়ার্ড বদলালে সংরক্ষিত প্রোফাইল যা নির্দেশ করে তা স্বয়ংক্রিয়ভাবে বদলায় না। আইটেম মুছে ফেলা আরও খারাপ: প্রোফাইল এমন কিছুর রেফারেন্স ধরে রাখে যা আর নেই, আর ব্যর্থতাটি প্রমাণীকরণ প্রত্যাখ্যানের মতো দেখায়।

একটি ক্রমে রোটেট করুন। আইটেম হালনাগাদ করুন, নতুন স্থায়ী রেফারেন্স কোয়েরি করুন, প্রোটোকল আবার সংরক্ষণ করুন, তারপর অ্যাপ বন্ধ রেখে সংযোগ করে প্রমাণ করুন ডেমন এখনও তা সমাধান করতে পারে। ব্যবহারকারীর পাসওয়ার্ড আর শেয়ার্ড সিক্রেট আলাদা আইটেমে রাখুন যাতে প্রত্যেকটি নিজের সময়সূচিতে ঘোরে, আর কোয়েরি অভিধান বা রেফারেন্স নিজে কখনও লগ করবেন না। হ্যান্ডেল গোপন তথ্য নয়, কিন্তু তা একটির মানচিত্র।

সম্পর্কিত নিবন্ধ