HTTPS এবং TLS কীভাবে কাজ করে: ভেতরের গল্প
আপনি একটি URL টাইপ করেন, এন্টার চাপেন এবং প্যাডলক দেখতে পান। কিন্তু আপনার ব্রাউজার এবং সার্ভারের মধ্যে সেই সংযোগটি সুরক্ষিত করতে আসলে কী ঘটে? অনেক ডেভেলপার HTTPS-কে একটি কালো বাক্স হিসেবে দেখেন—যতক্ষণ না কিছু ভেঙে যায়, যেমন সার্টিফিকেট ত্রুটি বা পারফরম্যান্স সমস্যা। এই নিবন্ধটি HTTPS এবং TLS-এর পর্দা সরিয়ে হ্যান্ডশেক, এনক্রিপশন এবং সার্টিফিকেট ভ্যালিডেশন ব্যবহারিক ভাষায় ব্যাখ্যা করে।
HTTPS আসলে কী
HTTPS হলো simplement HTTP যা TLS (ট্রান্সপোর্ট লেয়ার সিকিউরিটি)-এর উপরে স্তরিত। TLS তিনটি গ্যারান্টি প্রদান করে:
- গোপনীয়তা: ডেটা এনক্রিপ্ট করা হয় যাতে ইভসড্রপাররা এটি পড়তে না পারে।
- অখণ্ডতা: ট্রানজিটে ডেটা সনাক্তকরণ ছাড়া পরিবর্তন করা যায় না।
- প্রমাণীকরণ: আপনি আসল সার্ভারের সাথে কথা বলছেন, কোনো প্রতারকের সাথে নয়।
TLS এসেছে SSL (সিকিউর সকেট লেয়ার) থেকে। আধুনিক সংস্করণ (TLS 1.2 এবং 1.3) আপনার ব্যবহার করা উচিত; SSL বাতিল করা হয়েছে।
TLS হ্যান্ডশেক: ধাপে ধাপে
কোনো HTTP ডেটা প্রবাহিত হওয়ার আগে, ক্লায়েন্ট এবং সার্ভার এনক্রিপশন কী-তে সম্মত হতে একটি হ্যান্ডশেক সম্পাদন করে। সাধারণ TLS 1.3 হ্যান্ডশেকে যা ঘটে (সরলীকৃত):
- ক্লায়েন্ট হ্যালো: ব্রাউজার সমর্থিত সাইফার স্যুটের একটি তালিকা, একটি র্যান্ডম মান এবং কী এক্সচেঞ্জের জন্য তার কী শেয়ার পাঠায়।
- সার্ভার হ্যালো: সার্ভার একটি সাইফার স্যুট বেছে নেয়, নিজের র্যান্ডম মান এবং কী শেয়ার পাঠায় এবং তার সার্টিফিকেট উপস্থাপন করে।
- কী ডেরিভেশন: উভয় পক্ষ Diffie-Hellman কী এক্সচেঞ্জ ব্যবহার করে একই শেয়ার্ড সিক্রেট গণনা করে। এটি থেকে তারা সিমেট্রিক এনক্রিপশনের জন্য সেশন কী তৈরি করে।
- সমাপ্ত: উভয় পক্ষ হ্যান্ডশেকের অখণ্ডতা যাচাই করতে একটি MAC (মেসেজ অথেনটিকেশন কোড) পাঠায়। এখন এনক্রিপ্টেড অ্যাপ্লিকেশন ডেটা প্রবাহিত হতে পারে।
TLS 1.3 হ্যান্ডশেককে এক রাউন্ড ট্রিপ (1-RTT)-এ কমিয়েছে এবং পুনরায় শুরু করা সেশনের জন্য 0-RTT সমর্থন করে, যা লেটেন্সি উন্নত করে।
কী এক্সচেঞ্জ: Diffie-Hellman
আধুনিক TLS-এর জাদু হলো ক্লায়েন্ট এবং সার্ভার কখনো শেয়ার্ড সিক্রেট প্রেরণ না করেই এটিতে সম্মত হতে পারে। Diffie-Hellman (বিশেষত ইলিপ্টিক কার্ভের জন্য ECDHE) এটি সম্ভব করে। এমনকি যদি একজন আক্রমণকারী সম্পূর্ণ হ্যান্ডশেক রেকর্ড করে, তারা সেশন কী তৈরি করতে পারে না—এই বৈশিষ্ট্যকে ফরওয়ার্ড সিক্রেসি বলা হয়।
সিমেট্রিক এনক্রিপশন: AES বা ChaCha20
একবার শেয়ার্ড সিক্রেট প্রতিষ্ঠিত হলে, TLS সিমেট্রিক এনক্রিপশনে (যেমন AES-GCM বা ChaCha20-Poly1305) স্যুইচ করে কারণ এটি অ্যাসিমেট্রিক ক্রিপ্টোর চেয়ে অনেক দ্রুত। সেশন কী সমস্ত অ্যাপ্লিকেশন ডেটা এনক্রিপ্ট করতে ব্যবহৃত হয়।
সার্টিফিকেট ভ্যালিডেশন: বিশ্বাস করুন কিন্তু যাচাই করুন
সার্ভারের সার্টিফিকেট প্রমাণীকরণের কেন্দ্রবিন্দু। এতে সার্ভারের পাবলিক কী থাকে এবং এটি একটি সার্টিফিকেট অথরিটি (CA) দ্বারা স্বাক্ষরিত। ব্রাউজার কীভাবে এটি যাচাই করে:
- বিশ্বাসের শৃঙ্খল: সার্টিফিকেটটি অবশ্যই একটি বিশ্বস্ত রুট CA পর্যন্ত শৃঙ্খলিত হতে হবে যা ব্রাউজার বা OS-এ প্রি-ইনস্টল করা আছে।
- হোস্টনেম মিল: সার্টিফিকেটটি আপনার ভিজিট করা ডোমেইনের জন্য বৈধ হতে হবে (সাবজেক্ট অল্টারনেটিভ নেমের মাধ্যমে)।
- বৈধতার সময়কাল: সার্টিফিকেটের মেয়াদ শেষ হওয়া বা এখনও বৈধ না হওয়া চলবে না।
- রিভোকেশন: সার্টিফিকেট প্রত্যাহার করা হয়েছে কিনা তা নিশ্চিত করতে ব্রাউজার OCSP বা CRL পরীক্ষা করতে পারে।
যদি কোনো চেক ব্যর্থ হয়, আপনি একটি সতর্কতা পান—যেমন "আপনার সংযোগ ব্যক্তিগত নয়।"
সাধারণ TLS ভুল কনফিগারেশন
HTTPS সক্রিয় থাকলেও ভুলগুলি নিরাপত্তা দুর্বল করতে পারে:
- পুরানো প্রোটোকল: TLS 1.0/1.1 বা SSLv3 সমর্থন করা আপনাকে পরিচিত আক্রমণের কাছে উন্মুক্ত করে।
- দুর্বল সাইফার স্যুট: প্রশমন ছাড়াই RC4 বা CBC-মোড সাইফার অনুমোদন করা।
- HSTS অনুপস্থিত: HTTP স্ট্রিক্ট ট্রান্সপোর্ট সিকিউরিটি ছাড়া, ব্যবহারকারীদের HTTP-তে ডাউনগ্রেড করা যেতে পারে।
- সার্টিফিকেট ভুল ব্যবস্থাপনা: মেয়াদোত্তীর্ণ সার্টিফিকেট বা অনুপযুক্ত শৃঙ্খল কনফিগারেশন।
আপনার কনফিগারেশন পরীক্ষা করতে SSL Labs-এর SSL টেস্টের মতো টুল ব্যবহার করুন।
ব্যবহারিক উদাহরণ: Nginx দিয়ে HTTPS সক্রিয় করা
একটি সুরক্ষিত HTTPS সার্ভারের জন্য ন্যূনতম Nginx কনফিগারেশন:
server {
listen 443 ssl http2;
server_name example.com;
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers 'ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256';
ssl_prefer_server_ciphers off;
add_header Strict-Transport-Security "max-age=63072000" always;
location / {
root /var/www/html;
index index.html;
}
}
এই কনফিগারেশন Let's Encrypt সার্টিফিকেট ব্যবহার করে, শুধুমাত্র TLS 1.2 এবং 1.3 সক্রিয় করে এবং HSTS সেট করে।
সাধারণ জিজ্ঞাসা
TLS এবং SSL-এর মধ্যে পার্থক্য কী?
TLS হলো SSL-এর উত্তরসূরি। নিরাপত্তা ত্রুটির কারণে SSL সংস্করণ (2.0, 3.0) বাতিল করা হয়েছে। যখন লোকেরা "SSL সার্টিফিকেট" বলে, তারা সাধারণত TLS সার্টিফিকেট বোঝায়।
HTTPS কি আমার ওয়েবসাইট ধীর করে?
আধুনিক TLS (1.3) ন্যূনতম লেটেন্সি যোগ করে—প্রায়শই মাত্র কয়েক মিলিসেকেন্ড। সেশন রিজিউম্পশন এবং HTTP/2 সহ, HTTPS HTTP-এর মতো দ্রুত বা তার চেয়ে দ্রুত হতে পারে।
কীভাবে বিনামূল্যে TLS সার্টিফিকেট পাব?
Let's Encrypt বিনামূল্যে, স্বয়ংক্রিয় সার্টিফিকেট প্রদান করে। Certbot-এর মতো টুল আপনার জন্য সেগুলি পেতে এবং নবায়ন করতে পারে।
উপসংহার
HTTPS এবং TLS জাদু নয়—এগুলি সু-পরিকল্পিত প্রোটোকল যা প্রমাণীকরণের জন্য পাবলিক-কী ক্রিপ্টোগ্রাফি এবং গতির জন্য সিমেট্রিক এনক্রিপশনকে একত্রিত করে। হ্যান্ডশেক এবং সার্টিফিকেট ভ্যালিডেশন বোঝা আপনাকে সমস্যা ডিবাগ করতে এবং আপনার সার্ভারগুলিকে নিরাপদে কনফিগার করতে সহায়তা করে। সর্বদা TLS 1.2 বা 1.3 ব্যবহার করুন, সার্টিফিকেট আপ টু ডেট রাখুন এবং HSTS সক্রিয় করুন।
TLS ত্রুটি বা পারফরম্যান্স সমস্যা সনাক্ত করতে সার্ভার লগ বিশ্লেষণ করতে, আমাদের Nginx লগ অ্যানালাইজার চেষ্টা করুন।