TLS নিয়ন্ত্রণ চ্যানেলের ভেতরে চলে, পুরো টানেলের ভেতরে নয়
পিয়াররা নিজেদের প্যাকেট বিনিময় করে, আর TLS নিয়ন্ত্রণ বিনিময়ের ভেতরে চলে। HTTPS বোঝে এমন প্রক্সি এই ট্রাফিক কী তা জানে না।
VPN-এর বর্ণনায় TLS শব্দটি দেখে ধরে নেওয়া যে একটি ওয়েব প্রক্সি এই ট্রাফিক বুঝবে, এটি একটি সাধারণ শর্টকাট। এই প্রোটোকলের ভেতরে পিয়াররা নিজেদের প্যাকেট বিনিময় করে, আর TLS ওই বিনিময়ের মধ্যে একটি চ্যানেলের অংশ হিসেবে চলে। ব্যবহারকারীর কাছে গুরুত্বপূর্ণ পেলোড ভিন্ন বার্তা বিন্যাসে যায়, তাই দুটো কখনোই সাধারণ HTTPS সেশনের সঙ্গে মেলে না।
খামটি আগে আসে
প্রতিটি টানেল প্যাকেট প্রোটোকলের নিজস্ব হেডার দিয়ে শুরু হয়: বার্তার ধরন, একটি কী শনাক্তকারী এবং বাইট-স্ট্রিম পরিবহনে একটি দৈর্ঘ্য উপসর্গ যা প্যাকেট কোথায় শেষ হয় তা চিহ্নিত করে। যে পাঠক ওই খাম বিশ্লেষণ করে না, সে পরের ক্ষেত্রটি কোথায় শুরু তা জানতে পারে না।
outer transport (UDP datagram or TCP stream)
-> OpenVPN header (opcode, key id, length where needed)
-> control message (reliability wrapper, TLS exchange)
-> data message (protected inner packet)
ওই স্কেচ একটি মানচিত্র, বাইট টেবিল নয়, কারণ সঠিক ক্ষেত্রগুলি বার্তার ধরনের উপর নির্ভর করে, যদিও প্রথম অক্টেট সর্বদা অপকোড ও কী শনাক্তকারী একসঙ্গে রাখে। পোর্ট নম্বর থেকে বার্তার ধরন অনুমান করাই ডিকোডারদের দেখা জিনিসকে ভুল নাম দেওয়ার কারণ। রোগনির্ণয়ের জন্য ক্রমটাই গুরুত্বপূর্ণ: পরিবহন, তারপর প্রোটোকল খাম, তারপর দুই ধরনের কাজের একটি। এর পরে কী আসে সে সম্পর্কে মত গঠনের আগে খামটি পড়ুন। ভুল জায়গা থেকে শুরু করা ডিকোডার আত্মবিশ্বাসী অর্থহীনতা তৈরি করে।
নির্ভরযোগ্যতা স্তরটি প্রোটোকলেরই
নিয়ন্ত্রণ বার্তাগুলির ক্রমানুসারে স্বীকৃত ডেলিভারি দরকার, আর প্রোটোকল তা নিজেই স্বীকৃতি ও পুনঃপ্রেরণ দিয়ে সরবরাহ করে। একটি স্বীকৃতি আলাদা বার্তা হিসেবে আসতে পারে বা অন্য নিয়ন্ত্রণ বার্তার সঙ্গে যেতে পারে, যা একটি পরিষ্কার বিনিময় প্রত্যাশা করা কারও কাছে ট্রেসকে অনিয়মিত দেখায়।
সুবিধা হলো, বাইরের পরিবহন UDP হলেও TLS হ্যান্ডশেক একটি নির্ভরযোগ্য বাহক পায়। খরচ হলো, একটি ডেটাগ্রাম ওই কথোপকথনের কেবল একটি অংশ ধারণ করতে পারে, তাই এটিকে স্বতন্ত্র TLS রেকর্ড হিসেবে গণ্য করা অর্থহীনতা তৈরি করে। পুনঃসংযোজন প্রোটোকল স্তরেই ঘটতে হবে। সে কারণেই ধৃত প্যাকেট খুব কমই সম্পূর্ণ হ্যান্ডশেক ধাপের মতো দেখায়।
বাইরের পরিবহন TCP-তে বদলালে এই স্তরটি সরে না। নির্ভরযোগ্য পরিবহন মানে প্রোটোকল স্তরে কম পুনঃপ্রেরণ, ফ্রেমিং অদৃশ্য হওয়া বা ট্রাফিক HTTP হয়ে যাওয়া নয়।
ডেটা প্যাকেট ভিন্ন বিন্যাস ব্যবহার করে
সেশন তৈরি হলে উপযোগী পেলোড ডেটা বার্তা হিসেবে আসে, যা ভেতরের IP প্যাকেট বা Ethernet ফ্রেম বহন করে। এগুলি নিজস্ব কী ও নিজস্ব প্রক্রিয়াকরণে সুরক্ষিত, আর TLS লাইব্রেরি যে অর্থে গ্রহণ করবে এমন কোনো অর্থেই এগুলি TLS অ্যাপ্লিকেশন রেকর্ড নয়।
এই বিচ্ছেদ কনফিগারেশনে দৃশ্যমান: নিয়ন্ত্রণ চ্যানেল ও ডেটা চ্যানেলের আলাদা সাইফার সেটিংস আছে, তাই একটি নাম উল্লেখ করা লগ লাইন অন্যটি সম্পর্কে কিছুই বলে না। শক্তিশালী নিয়ন্ত্রণ সাইফারকে শক্তিশালী ডেটা সাইফারের প্রমাণ হিসেবে পড়া একটি সাধারণ প্রতিবেদন ভুল।
সম্পর্কিত একটি ভ্রান্ত ধারণাও ব্যাখ্যার বাইরে রাখুন। TLS সিমেট্রিক ডেটা চ্যানেলের পাশে বসা পাবলিক-কী চ্যানেল নয়, কারণ কী প্রতিষ্ঠিত হলে TLS নিজেই তার রেকর্ড সিমেট্রিকভাবে সুরক্ষিত করে। আসল পার্থক্য হলো ভূমিকা ও প্যাকেট বিন্যাস, প্রতিটি পক্ষ কোন ধরনের ক্রিপ্টোগ্রাফি ব্যবহার করে তা নয়।
কেন একটি HTTPS প্রক্সি সাহায্য করতে পারে না
যে প্রক্সি TLS সমাপ্ত করে, সে একটি TLS রেকর্ড স্ট্রিম এবং তার ভেতরে একটি অ্যাপ্লিকেশন প্রোটোকল প্রত্যাশা করে। এই প্রোটোকলের নিয়ন্ত্রণ চ্যানেল নিজস্ব ফ্রেমিংয়ের ভেতরে, চারপাশে একটি নির্ভরযোগ্যতা স্তর নিয়ে বহন করা হয়, তাই সমাপ্তকারী প্রক্সি ওই ফ্রেমিংকে ক্ষতিগ্রস্ত ইনপুট হিসেবে পড়ে।
একটি স্বচ্ছ ফরওয়ার্ডার যা বাইট বা ডেটাগ্রাম ব্যাখ্যা না করেই পাঠায়, কাজ করতে পারে, যদি এটি স্ট্রিম পুনর্লিখন বা পুনঃসংযোজন না করে। যেকোনো মধ্যস্থতাকারী সম্পর্কে প্রশ্ন করা উচিত, সে প্রকৃত পরিবহন ও ফ্রেমিং পাঠায় কি না, কোথাও TLS সমর্থন করে কি না নয়। প্রক্সি নিয়মে একটি সন্ধ্যা ব্যয় করার আগে এটি জিজ্ঞাসা করুন। এখানকার বেশিরভাগ ব্যর্থতা অনুপস্থিত সেটিং নয়, স্থাপত্যগত।
একটি ট্রেস সঠিকভাবে পড়া
প্রথমে একটি নিয়ন্ত্রণ বিনিময়, তারপর অনেক বেশি সংখ্যক ডেটা বার্তা প্রত্যাশা করুন, দুটোই একটি পরিবহন ভাগ করে। নিয়ন্ত্রণ পর্যায় সম্পূর্ণ হলে এবং ডেটা পর্যায় থেমে গেলে, ত্রুটি হ্যান্ডশেকের নয়, কী, রাউটিং বা ডেটা পথের ফিল্টারিং সংক্রান্ত। কয়েকটি ডেটা বার্তা ধারণ করুন এবং দেখুন সেগুলি ক্লায়েন্ট ছাড়ে কি না। ওই একটি পর্যবেক্ষণ অনুসন্ধানকে অর্ধেক করে।
ঐতিহাসিক কী-পদ্ধতির বর্ণনাগুলি প্রোটোকল ডকুমেন্টেশনে থাকলেও এর অর্থ এই নয় যে একটি নির্দিষ্ট সংস্করণ এখনও প্রতিটি পুরনো বিন্যাস সমর্থন করে। আপনি যে সংস্করণ চালান তা যাচাই করুন, তারপর কীভাবে জিনিস আগে কাজ করত তা বর্ণনা করা অনুচ্ছেদের উপর প্রত্যাশা গড়ুন।