স্ব-স্বাক্ষরিত VPN সার্টিফিকেট: এর অর্থ কী এবং এটি কাকে বিশ্বাস করে
একটি স্ব-স্বাক্ষরিত VPN সার্টিফিকেট এখনও ট্রাফিক এনক্রিপ্ট করে। যা বদলায় তা হলো আপনি কাকে এটি বিশ্বাস করতে বলেছেন, কোন স্টোর সেই বিশ্বাস পায় এবং কোন যাচাইগুলো থেকে যায়।
এখানে সবচেয়ে বেশি ক্ষতি করে দুটি বিশ্বাস: যে একটি স্ব-স্বাক্ষরিত VPN সার্টিফিকেট মানে টানেলটি এনক্রিপ্ট করা নেই, এবং যে VPN ক্লায়েন্ট যা চেয়েছে তা ইনস্টল করা শুধু VPN-কেই প্রভাবিত করে। কোনোটিই বাস্তব স্থাপনার সংস্পর্শে টেকে না। একটি স্ব-স্বাক্ষরিত সার্টিফিকেট একটি স্বাক্ষর সম্পর্ক বর্ণনা করে, নিরাপত্তার রায় নয়, এবং আপনি যে বিশ্বাস যোগ করেন তার বিস্তার নির্ভর করে এটি কোন স্টোরে পড়ে তার উপর। আমি দেখেছি একটি হেল্পডেস্ক একটি সতর্কতা চুপ করাতে Windows মেশিনে একটি প্রোভাইডার রুট আমদানি করে, তারপর একটা দুপুর ব্যাখ্যা করে যে ব্রাউজার কেন একটি অসম্পর্কিত পোর্টাল নিয়ে অভিযোগ করা বন্ধ করেছে। এই প্রশ্নের দুটি অর্ধেক একসাথে থাকে, তাই এগুলোকে এক হিসেবে ধরুন।
সার্টিফিকেট কোনো ট্রাস্ট স্টোর নয়
সার্ভার যে ফাইলটি উপস্থাপন করে তাতে একটি পাবলিক কী, একটি সাবজেক্ট নাম, একটি ইস্যুয়ার নাম, বৈধতার তারিখ এবং এক্সটেনশন থাকে। স্ব-স্বাক্ষরিত মানে সাবজেক্ট ও ইস্যুয়ার একই সত্তা এবং স্বাক্ষরটি সার্টিফিকেটের নিজস্ব কী দিয়ে যাচাই হয়। সেই সংজ্ঞায় কিছুই বলে না সংযোগটি দুর্বল, আর কিছুই বলে না ক্লায়েন্ট এটি গ্রহণ করবে।
গ্রহণযোগ্যতা আসে অন্য জায়গা থেকে: একটি CA ফাইল যার দিকে আপনি ক্লায়েন্টকে নির্দেশ করেন, একটি ফিঙ্গারপ্রিন্ট যা আপনি হাতে মিলিয়ে দেখেন, অথবা একটি রুট যা ইতিমধ্যে ক্লায়েন্ট যে স্টোর পড়ে সেখানে বসে আছে। একটি স্থাপনা সম্পূর্ণ সুস্থ হতে পারে অথচ তার সার্টিফিকেট প্রতিটি পাবলিক পরীক্ষায় ব্যর্থ হবে। সিস্টেম বান্ডলের বিপরীতে openssl verify একটি অজানা ইস্যুয়ার রিপোর্ট করবে, এবং সেই রিপোর্টটি ত্রুটি নয়, সঠিক।
OpenVPN-এর ca অপশনটি অ্যাপ-সীমিত বিশ্বাসের সবচেয়ে স্পষ্ট উদাহরণ। সেই ফাইলটি ক্লায়েন্ট যে অ্যাঙ্করগুলো গ্রহণ করবে তা নাম দেয়, এবং এতে একটি প্রাইভেট CA থাকতে পারে বা ছোট স্থাপনায় সার্ভারের নিজস্ব স্ব-স্বাক্ষরিত সার্টিফিকেট থাকতে পারে। সংস্করণ 2.6 একটি CA ফাইল বিতরণের বদলে SHA-256 ফিঙ্গারপ্রিন্ট পিন করতে --peer-fingerprint-ও গ্রহণ করে। WireGuard আরও দূরে: এতে কোনো সার্টিফিকেটই নেই, শুধু প্রতিটি পিয়ারের জন্য একটি স্ট্যাটিক পাবলিক কী, তাই স্ব-স্বাক্ষরিত প্রশ্নটি এর উপর প্রযোজ্য নয়।
আপনি বিশ্বাস কোথায় ইনস্টল করেন তা নির্ধারণ করে কে তা উত্তরাধিকার পাবে
একই সার্টিফিকেট তিন জায়গায় রাখুন এবং তিনটি ভিন্ন বিস্ফোরণ ব্যাসার্ধ পাবেন। কেবল VPN ক্লায়েন্ট যে বান্ডল পড়ে তা সেই ক্লায়েন্টকে প্রভাবিত করে। অপারেটিং সিস্টেমের স্টোরে থাকা একটি রুট সেই স্টোরের সঙ্গে পরামর্শ করা প্রতিটি প্রোগ্রামকে প্রভাবিত করে। নিজস্ব ট্রাস্ট ডেটাবেস থাকা ব্রাউজার উভয়কেই উপেক্ষা করতে পারে, তাই কাজ করেছে বলে মনে হওয়া একটি আমদানির পরেও একটি সতর্কতা টিকে থাকতে পারে।
Debian বা Ubuntu-তে /usr/local/share/ca-certificates/-এ একটি ফাইল ফেলে update-ca-certificates চালালে সিস্টেম-ব্যাপী বান্ডল বদলে যায়। Windows-এ certutil -addstore -f Root মেশিন স্টোরে লেখে এবং একটি উন্নীত প্রম্পট দরকার, অন্যদিকে -user যোগ করা বর্তমান ব্যবহারকারীর স্টোরকে লক্ষ্য করে; দুটি বিনিময়যোগ্য নয়। Firefox নিজস্ব NSS ডেটাবেস রাখে, তাই OS-স্তরের একটি আমদানি সেখানে কখনোই দেখা নাও যেতে পারে।
পরিধি গুরুত্বপূর্ণ কারণ একটি কর্তৃপক্ষ কী করতে পারে তার উপর নির্ভর করে। একটি ইস্যুকারী CA এমন নামের জন্য স্বাক্ষর করতে পারে যার সঙ্গে তার কোনো সম্পর্ক নেই, তাই যে কেউ সেই স্টোরে বিশ্বাস করে সে সেই স্বাক্ষরগুলো গ্রহণ করবে। একটি একক পিন করা লিফ তা করতে পারে না; এটি ঠিক একটি পিয়ার পরিচয়কে প্রমাণ করে। যদি লক্ষ্য হয় একটি VPN সংযোগ করানো, তবে অ্যাপ-সীমিত CA বা একটি পিন করা লিফ তা পৌঁছে দেয়, অন্যদিকে মেশিন-ব্যাপী রুট লক্ষণের প্রয়োজনের চেয়ে অনেক বড় ছাড়।
আপনি এখনও পাবলিক CA ছাড়া এনক্রিপ্ট করছেন
TLS হ্যান্ডশেক সেশন কী তৈরি করে, পিয়ার সার্টিফিকেট আপনার ইতিমধ্যে বিশ্বাস করা কিছুতে শৃঙ্খলাবদ্ধ হোক বা না হোক। স্ব-স্বাক্ষরিত মানে প্লেইনটেক্সট নয়, এবং এর মানে এই নয় যে ট্রাফিক উড্ডয়নে পাঠযোগ্য। এর মানে হলো ক্লায়েন্টের কাছে কোনো পূর্বনির্ধারিত কারণ নেই বিশ্বাস করার যে কী-টি তার চাওয়া সার্ভারেরই।
সেই ফাঁকেই সত্যিকারের আক্রমণ থাকে। যে ক্লায়েন্ট যেকোনো সার্টিফিকেট গ্রহণ করতে কনফিগার করা, হয় নিষ্ক্রিয় যাচাইকরণ সেটিংয়ের মাধ্যমে, নয়তো একবার চাপা এবং ভুলে যাওয়া একটি তবু-বিশ্বাস-করুন বোতামের মাধ্যমে, সে যে উত্তর দেয় তার কাছে আনন্দের সঙ্গে এনক্রিপ্ট করবে। ইন্টারসেপশন ঘটে প্রমাণীকরণ ধাপে, অ্যাপ্লিকেশন ডেটা সরার আগে। পরিচয় যাচাই ছাড়া এনক্রিপশন নিষ্ক্রিয় পর্যবেক্ষককে বাইরে রাখে এবং আর বেশি কিছু করে না।
ইস্যুয়ারকে বিশ্বাস করা নাম যাচাই এড়ায় না
চেইন যাচাই, নাম মিলানো এবং সার্টিফিকেটের উদ্দেশ্য আলাদা সিদ্ধান্ত। চেইন বৈধ হতে পারে অথচ নাম ভুল, এবং নাম মিলতে পারে অথচ সার্টিফিকেট ভিন্ন ভূমিকার জন্য ইস্যু করা। RFC 5280 সেই সীমাবদ্ধতাগুলো বহনকারী ক্ষেত্রগুলো সংজ্ঞায়িত করে, এবং ক্লায়েন্ট কত কঠোরভাবে সেগুলো প্রয়োগ করে তা প্রতি-অ্যাপ্লিকেশনের বিষয়।
OpenVPN বিচ্ছেদটি দৃশ্যমান করে। verify-x509-name প্রত্যাশিত সাবজেক্টকে name, name-prefix বা subject মিলানোর মাধ্যমে পিন করে। remote-cert-tls server পিয়ার সার্টিফিকেটকে সার্ভার সার্টিফিকেট হিসেবে ব্যবহারযোগ্য হতে দাবি করে, যা শুধু-ক্লায়েন্ট সার্টিফিকেটকে প্রত্যাখ্যান করে এমনকি যখন ইস্যুয়ার বিশ্বস্ত। কোনো সেটিংই CA ফাইল পাঠানোর দ্বারা প্রতিস্থাপিত হয় না।
কোনো সিদ্ধান্ত নেওয়ার আগে সার্টিফিকেটটি দেখুন:
openssl x509 -in server.crt -noout -subject -issuer -dates -ext subjectAltNameদেখায় কে এটি ইস্যু করেছে, কোন নামের জন্য এবং কখন পর্যন্ত।openssl verify -CAfile ca.crt server.crtযাচাই করে যে আপনি যে চেইন পাঠাতে চান তা সত্যিই লিফটিকে বৈধ করে।openssl s_client -connect vpn.example.net:443 -servername vpn.example.net -CAfile ca.crt -verify_return_errorওয়েব পোর্টালের মতো TLS প্রান্তবিন্দুর জন্য কাজ করে; 1194-এ OpenVPN প্রোটোকল সাধারণ TLS প্রবাহ নয়, তাই সেই পরীক্ষা সেখানে প্রযোজ্য নয়।
মেয়াদোত্তীর্ণ তারিখ, আপনি যে নামে সংযোগ করেন তার জন্য subjectAltName না থাকা, বা serverAuth ব্যবহার অনুপস্থিত থাকা সার্টিফিকেট অ্যাঙ্কর কত যত্নে ইনস্টল করা হয়েছে তা নির্বিশেষে ব্যর্থ হয়।
একটি গ্রহণ করার আগে পাঁচটি যাচাই
যে সংযোগটি আপনি ঠিক করার চেষ্টা করছেন তা নয় এমন একটি চ্যানেলে ফিঙ্গারপ্রিন্ট মিলান: একটি কনসোল, আপনার কাছে ইতিমধ্যে থাকা একটি ইনস্টলার, একটি স্বাক্ষরিত কনফিগারেশন ফাইল। সার্ভারে openssl x509 -in server.crt -noout -fingerprint -sha256 এবং ক্লায়েন্ট লগে একই মান—এটাই জানার জন্য যথেষ্ট যে আপনি একটি বস্তু দেখছেন।
এরপর সিদ্ধান্ত নিন আপনি কী ইনস্টল করছেন: একটি লিফ, নাকি আরও তৈরি করতে পারে এমন একটি কর্তৃপক্ষ। তারপর সিদ্ধান্ত নিন এটি কোথায় যাবে, এবং যে অ্যাপ্লিকেশনগুলো সেই স্টোর পড়ে তাদের নাম দিন। অপসারণের পথটি লিখে রাখুন যখন এটি এখনও মনে আছে, কারণ বিশ্বাস-করুন-এবং-এগিয়ে-যান এভাবেই একটি সাময়িক আমদানি স্থায়ী হয়ে যায়।
শেষে, পরিবর্তনের পরিকল্পনা করুন। পিন করা সার্টিফিকেট বা ফিঙ্গারপ্রিন্ট সার্টিফিকেট ঘুরে গেলে একই বিশ্বস্ত চ্যানেল দিয়ে আপডেট করতে হবে, এবং একটি প্রাইভেট CA-এর নিজস্ব ইস্যু ও প্রত্যাহার জীবনচক্র আছে। প্রাইভেট কী ফাঁস হলে একই সার্টিফিকেটের একটি অনুলিপি আবার বিশ্বাস করা কিছুই মেরামত করে না; পরিচয়টি বদলাতে হবে।
যদি একটি সতর্কতা পাঁচটি যাচাই সবই পার হয়ে যায়, তাহলে উপকারী প্রশ্নটি নয় কোন বোতাম এটি চুপ করে, বরং ক্লায়েন্ট আসলে কোন স্টোর পড়ে এবং সেই রুট কোথা থেকে এসেছে। এর উত্তর দিন, তাহলে আপনি যে আমদানি করতে যাচ্ছেন তা প্রতিক্রিয়া নয়, সিদ্ধান্ত হয়ে উঠবে।