SSTP ক্লায়েন্ট কেবল TLS যাচাই সফল হওয়ার পরেই সার্ভার গ্রহণ করে, আর সেই যাচাই একটি নাম, একটি চেইন ও একটি উদ্দেশ্য মেলায়। নামটি আসে সংযোগ প্রোফাইল থেকে, আপনি যে ঠিকানায় সৌভাগ্যক্রমে পিং করতে পারেন তা থেকে নয়। তিনটির একটি না মিললে ক্লায়েন্ট সার্টিফিকেট সমস্যা জানায় এবং কখনো লগইন প্রম্পটে পৌঁছায় না।

প্রোফাইলের নামই ঠিক করে কী যাচাই হবে

SSTP TCP 443-এর ওপর TLS চালায়, তাই ক্লায়েন্ট অন্য যেকোনো TLS ক্লায়েন্টের মতো আচরণ করে: প্রোফাইল থেকে হোস্টনাম নেয়, সেই নাম অনুরোধ করে এবং তার সঙ্গে সার্টিফিকেট মেলায়। প্রোফাইলে IP ঠিকানা লিখলে তুলনাটি IP ঠিকানার তুলনা হয়ে যায়, যা বেশিরভাগ সার্ভার সার্টিফিকেট পূরণ করে না।

তাই ব্রাউজার পরীক্ষা সফল হতে পারে অথচ VPN ব্যর্থ হয়, কারণ ব্রাউজার প্রোফাইলের চেয়ে ভিন্ন নাম ব্যবহার করেছে। একই বিভাজন দেখা যায় যখন split-horizon DNS VPN হোস্টনামকে অভ্যন্তরীণ ঠিকানায় সমাধান করে অথচ ব্রাউজার একটি পাবলিক ঠিকানায় পৌঁছেছে। আগে প্রোফাইলকে নথিভুক্ত হোস্টনামের সঙ্গে মেলান, তারপর সার্টিফিকেট তুলনা করুন। এর আগে আপনি যা অন্য কিছু বদলান, তা অনুমান।

সার্ভার সার্টিফিকেটে কী থাকতে হবে

আধুনিক ক্লায়েন্ট subject alternative name এক্সটেনশনের সঙ্গে মেলায়, তাই হোস্টনামকে সেখানে DNS এন্ট্রি হিসেবে থাকতে হবে। শুধু common name বর্তমান যাচাই স্ট্যাকের জন্য যথেষ্ট নয়, আর ওয়াইল্ডকার্ড একটি লেবেল ঢাকে, আপনি বানানো যেকোনো সাবডোমেন নয়। তিনটি সার্টিফিকেট সীমাটি দেখায়: সঠিক নাম ও ভুল উদ্দেশ্য পরিচয় যাচাই করে তারপর উদ্দেশ্য যাচাইয়ে ব্যর্থ হয়, সঠিক নাম ও উদ্দেশ্য কিন্তু অনুপস্থিত ইন্টারমিডিয়েট থাকলে চেইনে ব্যর্থ হয়, আর যে নাম কেবল common name-এ আছে সেটি ওই দুটির আগেই ব্যর্থ হয়।

সার্টিফিকেটে সার্ভার প্রমাণীকরণের উদ্দেশ্যও দরকার—মাইক্রোসফটের SSTP স্পেসিফিকেশন-এ উল্লিখিত extended key usage মান, অর্থাৎ অবজেক্ট আইডেন্টিফায়ার 1.3.6.1.5.5.7.3.1 সহ serverAuth। key usage ও একটি বৈধ চেইন মিলে সেটটি পূর্ণ করে। সার্ভারে থাকা, সঠিক নামের জন্য ইস্যু করা কিন্তু কেবল ক্লায়েন্ট প্রমাণীকরণের জন্য এমন সার্টিফিকেটও ব্যর্থ হয়।

লগইন তথ্যের আগে চেইন ও ঘড়ি যাচাই করুন

সময় ও বিশ্বাসের ব্যর্থতা নাম না মেলার মতোই দৃশ্যমান ফল দেয়, আর দুটিই পাসওয়ার্ড সমস্যার চেয়ে কম খরচে নির্ণয় করা যায়। সার্ভারের ঘড়ি ও ক্লায়েন্টের ঘড়ি দেখুন, তারপর ক্লায়েন্ট যেভাবে দেখে সেভাবে চেইনটি পড়ুন:

# from the client, or any host that runs openssl
openssl s_client -connect vpn.example.com:443 -servername vpn.example.com -showcerts </dev/null 2>/dev/null | openssl x509 -noout -subject -dates -ext subjectAltName
openssl s_client -connect vpn.example.com:443 -servername vpn.example.com -verify_return_error </dev/null
# on the Windows server that holds the SSTP listener
w32tm /query /status

প্রথম কমান্ড নাম, বৈধতার সময়সীমা এবং ক্লায়েন্ট যে বিকল্প নামগুলোর সঙ্গে মেলাবে তা ছাপে। দ্বিতীয়টি উপস্থাপিত চেইনসহ যাচাইয়ের ত্রুটি জানায়, আর সেখানেই অনুপস্থিত ইন্টারমিডিয়েট দেখা যায়। Windows-এ সময় সেবার প্রশ্ন বলে দেয় ঘড়িটি সংশোধন হচ্ছে, নাকি কেবল সরে গেছে।

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

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

নাম বা সার্টিফিকেট ঠিক করে আবার পরীক্ষা করুন

মেরামত তিনটি শর্তে নির্ধারিত হয়। প্রোফাইলের নাম ভুল হলে প্রোফাইল সংশোধন করুন বা সার্টিফিকেটে অনুপস্থিত নামটি যোগ করুন। চেইন অসম্পূর্ণ হলে সার্ভারে ইন্টারমিডিয়েটটি ইনস্টল করুন। উদ্দেশ্য ভুল হলে তার চারপাশে প্যাচ না দিয়ে নতুন করে ইস্যু করুন।

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

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