ConnMan OpenConnect-এ কুকির মেয়াদ শেষ, সার্টিফিকেটের সমস্যা নয়
লগে দুটি ব্যর্থতা একই রকম দেখায়। পিন করা ফিঙ্গারপ্রিন্টের সঙ্গে সেশন কুকি মিলিয়ে দেখুন, যে ক্ষেত্রটির মেয়াদ শেষ হয়েছে সেটি রিফ্রেশ করুন, তারপর ডেমন রিস্টার্ট করুন।
ConnMan একটি দুপুর কাজ করে, তারপর অস্বীকার করে, আর জার্নালের লাইনটি সার্টিফিকেট যাচাইয়ের কথা বলে। সেই লাইনটি মানুষকে এমন CA বান্ডলের দিকে পাঠায় যেগুলো কখনোই নষ্ট ছিল না। দুটি ভিন্ন ত্রুটি প্রায় একই রকম ব্যর্থতার রূপ তৈরি করে: সেশন কুকির মেয়াদ শেষ হয়, অথবা সার্ভার সার্টিফিকেট সত্যিই বদলে গেছে। এক মিনিটের মধ্যেই এদের আলাদা করা যায়, এবং দুটির মধ্যে কেবল একটিতেই ফিঙ্গারপ্রিন্ট জড়িত।
দুটি ত্রুটি, একটি বিভ্রান্তিকর লগ লাইন
দুটি পর্যবেক্ষণে এরা আলাদা হয়, এবং কোনোটির জন্যই দ্বিতীয়বার পড়ার দরকার নেই। প্রথমটি হলো ব্যর্থতা কখন শুরু হলো: মেয়াদোত্তীর্ণ কুকি ঘণ্টা বা দিন ধরে কাজ করার পরে আসে, আর প্রতিস্থাপিত সার্টিফিকেট আসে গেটওয়ে পরিবর্তনের ঠিক পরেই।
| Signal | Expired cookie | Changed certificate |
|---|---|---|
| When it started | after hours or days of working | right after a gateway change |
| Fingerprint from a fresh authenticate | unchanged | different value |
| Usual log tail | HTTP CONNECT 401 / unauthorized | signer not found / verify failed |
| Repair | replace the cookie, restart | re-pin deliberately, then restart |
এক মিনিটের পরীক্ষাটি হলো নিচের authenticate রান। এর FINGERPRINT ফাইলটির OpenConnect.ServerCert-এর সঙ্গে মিলিয়ে দেখুন। একই ফিঙ্গারপ্রিন্ট কিন্তু ভিন্ন COOKIE মানে কেবল কুকিটি বদলাতে হবে। ভিন্ন ফিঙ্গারপ্রিন্ট মানে সার্ভার সার্টিফিকেট সত্যিই বদলেছে, তাই সচেতনভাবে এটি আবার পিন করুন এবং কে অনুমোদন করেছে তা লিখে রাখুন।
টাইপ না করে উপকরণটি তৈরি করুন
NetworkManager-এর মতো নয়, ConnMan-এ OpenConnect প্রোফাইল আমদানির কোনো ধাপ নেই। এটি একটি provisioning ফাইল পড়ে যার মানগুলো আগে থেকেই তৈরি করতে হয়, এবং সেগুলো তৈরির সমর্থিত উপায় হলো OpenConnect-এর authenticate মোড।
sudo openconnect --csd-wrapper=/home/user/.cisco/csd-wrapper.sh \
--authenticate --user myuser vpn.example.comআউটপুট চারটি মান ছাপে: POST, COOKIE, HOST এবং FINGERPRINT। sha256: উপসর্গযুক্ত ফিঙ্গারপ্রিন্টটি হলো সার্ভার পিন। আর কুকি হলো সেশন আর্টিফ্যাক্ট, যার আয়ুষ্কাল গেটওয়ে ঠিক করে। এদের ভিন্ন ধরনের গোপন তথ্য হিসেবে দেখুন: এদের মেয়াদ ভিন্ন সময়সূচিতে শেষ হয়, এবং কেবল একটির বদল প্রত্যাশিত।
ফাইলটি দুটোই বহন করে, আর তারা ভিন্নভাবে পুরোনো হয়
provisioning ফাইলটি /var/lib/connman-vpn/-এর অধীনে থাকে এবং ট্রে অ্যাপ্লেট নয়, VPN ডেমন প্রতিটি সংযোগের জন্য এটি পড়ে। সংযোগের নামটি গ্লোবাল সেকশনে এবং প্রোটোকলের বিবরণ প্রোভাইডার সেকশনে রাখুন।
[global]
Name = Company VPN
[provider_openconnect]
Type = OpenConnect
Name = Company Cisco VPN
Host = vpn.example.com
Domain = corp.example
OpenConnect.ServerCert = sha256:...
OpenConnect.Cookie = ...পোর্টালটি যে হোস্ট নামটি সত্যিই পরিবেশন করে সেটিই ব্যবহার করুন। খালি IP ঠিকানা সার্টিফিকেট যাচাই পেরিয়ে গিয়েও ব্যর্থ হতে পারে, কারণ অ্যাপ্লায়েন্সটি ভার্চুয়াল হোস্টের ভিত্তিতে রুট করে এবং নামটিই প্রত্যাশা করে।
systemctl status connman-vpn --no-pager # is the daemon even installed and running
sudo systemctl restart connman-vpn # after the file edit
journalctl -u connman-vpn --since '1 hour ago' # after the connection attemptজার্নাল আসলে কী দেখায়
ট্রে টুলটিপ বলবে না আপনার কোন ত্রুটি। জার্নাল বলবে, যদি আপনি প্রথম আতঙ্কজনক লাইনের বদলে ক্রমটি পড়েন। পুরোনো কুকি সাধারণত দেখায় যে TLS আলোচনা সম্পন্ন হয়েছে এবং HTTP স্তর পরে প্রত্যাখ্যান করেছে; এজন্যই সার্টিফিকেট সংক্রান্ত শব্দগুলো একটি অনুমোদন ব্যর্থতার পাশে থাকে।
একটি নতুন authenticate রানের সঙ্গে ফাইলের মানগুলো মিলিয়ে দেখুন। যদি ফিঙ্গারপ্রিন্ট মেলে এবং কেবল কুকি আলাদা হয়, তবে বিশ্বাস সেটিংসে হাত না দিয়েই আপনার উত্তর পেয়ে গেছেন।
যে ক্ষেত্রটির মেয়াদ শেষ হয়েছে সেটি রিফ্রেশ করুন
authenticate কমান্ডটি পুনরাবৃত্তি করুন, OpenConnect.Cookie প্রতিস্থাপন করুন, এবং ডেমন রিস্টার্ট করুন। নতুন আউটপুট ভিন্ন মান না দেখালে ফিঙ্গারপ্রিন্টটি অপরিবর্তিত রাখুন; সেক্ষেত্রে সার্ভার সার্টিফিকেট সত্যিই প্রতিস্থাপিত হয়েছে এবং আবার পিন করা হলো এমন একটি সিদ্ধান্ত যা কারও নথিভুক্ত করা উচিত, ত্রুটির বার্তা থেকে পেস্ট করা নয়।
রিফ্রেশ স্বয়ংক্রিয় করা যুক্তিসঙ্গত: একটি ছোট স্ক্রিপ্ট স্ট্যান্ডার্ড ইনপুট থেকে পাসওয়ার্ড পড়ে, authenticate মোড চালায় এবং কেবল কুকির লাইনটি পুনর্লিখন করে। ক্রেডেনশিয়ালটি স্ক্রিপ্টের বাইরে রাখুন এবং কেবল যে অ্যাকাউন্টটি এটি চালায় তার জন্য পঠনযোগ্য করুন, আর পুনর্লিখনটি অ্যাটমিক করুন যাতে ব্যর্থ রান অর্ধলিখিত ফাইল না রেখে যায়।
রিফ্রেশ যদি প্রতি কয়েক ঘণ্টায় দরকার হয়, ব্যবধানটি লিখে রাখুন। এটি গেটওয়ের সেশন নীতির একটি বৈশিষ্ট্য, এবং এটি স্থির করে রিফ্রেশ স্বয়ংক্রিয় করবেন কি না বা দীর্ঘতর সেশন চাইবেন কি না।