HTTPS এবং TLS কীভাবে কাজ করে: একটি ব্যবহারিক গাইড
আপনি ব্রাউজারে তালার আইকন দেখেছেন এবং জানেন HTTPS গুরুত্বপূর্ণ। কিন্তু আপনি কি realmente বুঝতে পারেন যখন একটি ব্রাউজার HTTPS সাইটে সংযোগ করে তখন কী ঘটে? অনেক ডেভেলপার TLS-কে একটি ব্ল্যাক বক্স হিসেবে দেখেন—একবার কনফিগার করে ভুলে যান। যতক্ষণ না কিছু ভেঙে যায়, পারফরম্যান্স খারাপ হয়, বা নিরাপত্তা 감사 ত্রুটি প্রকাশ করে, ততক্ষণ এটি কাজ করে।
এই গাইডটি ব্যবহারিক পরিভাষায় HTTPS এবং TLS ব্যাখ্যা করে। আপনি হ্যান্ডশেক প্রক্রিয়া, কীভাবে সার্টিফিকেট বিশ্বাস স্থাপন করে এবং আপনার সার্ভারে সঠিকভাবে TLS প্রয়োগ করার পদক্ষেপগুলি শিখবেন। কোনো পরিভাষার অতিরিক্ত বোঝা নয়—শুধু সমস্যা ডিবাগ করতে এবং সচেতন সিদ্ধান্ত নিতে আপনার প্রয়োজনীয় ধারণাগুলি।
HTTPS আসলে কী
HTTPS হল TLS (ট্রান্সপোর্ট লেয়ার সিকিউরিটি)-এর উপরে স্তরযুক্ত HTTP। এটি তিনটি গ্যারান্টি প্রদান করে:
- এনক্রিপশন: ক্লায়েন্ট এবং সার্ভারের মধ্যে বিনিময় ডেটা ইভসড্রপারদের কাছে অপাঠনীয়।
- প্রমাণীকরণ: ক্লায়েন্ট যাচাই করে যে এটি বৈধ সার্ভারের সাথে কথা বলছে, কোনো প্রতারকের সাথে নয়।
- অখণ্ডতা: ট্রানজিটে ডেটা সনাক্তকরণ ছাড়া পরিবর্তন করা যায় না।
TLS হল সেই প্রোটোকল যা এটি সম্ভব করে। SSL হল এর পূর্বসূরি—আপনি এখনও মার্কেটিংয়ে "SSL সার্টিফিকেট" দেখতে পাবেন, কিন্তু আধুনিক সিস্টেম TLS ব্যবহার করে (বর্তমানে TLS 1.3 সর্বশেষ)।
TLS হ্যান্ডশেক: ধাপে ধাপে
কোনো HTTP ডেটা প্রবাহিত হওয়ার আগে, ক্লায়েন্ট এবং সার্ভার এনক্রিপশন প্যারামিটারগুলিতে সম্মত হতে এবং পরিচয় যাচাই করতে একটি হ্যান্ডশেক সম্পাদন করে। আধুনিক মান TLS 1.3-এর জন্য সরলীকৃত প্রবাহ এখানে:
- ক্লায়েন্ট হ্যালো: ব্রাউজার সমর্থিত সাইফার স্যুট, TLS সংস্করণ এবং একটি র্যান্ডম মান (ক্লায়েন্ট র্যান্ডম) এর একটি তালিকা পাঠায়।
- সার্ভার হ্যালো: সার্ভার একটি সাইফার স্যুট বেছে নেয়, নিজের র্যান্ডম মান (সার্ভার র্যান্ডম) পাঠায় এবং তার সার্টিফিকেট চেইন প্রদান করে।
- কী এক্সচেঞ্জ: এফেমেরাল ডিফি-হেলম্যান (বা অনুরূপ) ব্যবহার করে, উভয় পক্ষ সরাসরি প্রেরণ না করেই একটি শেয়ার্ড সিক্রেট তৈরি করে। এটি ফরওয়ার্ড সিক্রেসি প্রদান করে—পরে সার্ভারের প্রাইভেট কী compromised হলে অতীতের সেশন ডিক্রিপ্ট হবে না।
- সার্টিফিকেট যাচাই: ক্লায়েন্ট বিশ্বস্ত রুট CA-এর বিরুদ্ধে সার্টিফিকেট পরীক্ষা করে, ডোমেইন নাম যাচাই করে এবং মেয়াদোত্তীর্ণ এবং প্রত্যাহার অবস্থা পরীক্ষা করে।
- সমাপ্ত: উভয় পক্ষ একটি MAC (মেসেজ অথেনটিকেশন কোড) পাঠায় নিশ্চিত করতে যে হ্যান্ডশেকের সাথে টেম্পারিং হয়নি। এনক্রিপ্টেড HTTP ট্র্যাফিক শুরু হয়।
TLS 1.3 হ্যান্ডশেককে এক রাউন্ড ট্রিপে (1-RTT) কমিয়েছে এবং পুনরাবৃত্ত দর্শনার্থীদের জন্য 0-RTT পুনরায় শুরু সমর্থন করে, লেটেন্সি উন্নত করে। TLS 1.2-এর জন্য দুই রাউন্ড ট্রিপ প্রয়োজন ছিল।
সার্টিফিকেট: বিশ্বাসের অ্যাঙ্কর
একটি TLS সার্টিফিকেট একটি পাবলিক কী-কে একটি ডোমেইন নামের সাথে আবদ্ধ করে এবং একটি সার্টিফিকেট অথরিটি (CA) দ্বারা স্বাক্ষরিত হয়। যখন আপনার ব্রাউজার example.com-এ সংযোগ করে, এটি পরীক্ষা করে যে সার্টিফিকেটটি:
- এর ট্রাস্ট স্টোরে থাকা একটি CA দ্বারা স্বাক্ষরিত (বা একটিতে চেইন আপ করে)।
- ডোমেইন নামের সাথে মেলে (সাবজেক্ট অল্টারনেটিভ নেমের মাধ্যমে)।
- এর বৈধতার সময়কালের মধ্যে রয়েছে।
- প্রত্যাহার করা হয়নি (OCSP বা CRL-এর মাধ্যমে, যদিও প্রয়োগ পরিবর্তিত হয়)।
আপনি Let's Encrypt থেকে বিনামূল্যে সার্টিফিকেট পেতে পারেন, যা ACME প্রোটোকলের মাধ্যমে 90-দিনের সার্টিফিকেট ইস্যু করে। Certbot-এর মতো অটোমেশন সরঞ্জাম নবায়ন পরিচালনা করে। অভ্যন্তরীণ পরিষেবাগুলির জন্য, আপনি নিজের CA চালাতে পারেন, তবে ক্লায়েন্টদের অবশ্যই এটি স্পষ্টভাবে বিশ্বাস করতে হবে।
আপনার সার্ভারে TLS কনফিগার করা
সঠিক কনফিগারেশন নিরাপত্তা, সামঞ্জস্য এবং পারফরম্যান্সের মধ্যে ভারসাম্য বজায় রাখে। এখানে একটি চেকলিস্ট:
- শুধুমাত্র TLS 1.2 এবং 1.3 ব্যবহার করুন। TLS 1.0 এবং 1.1 নিষ্ক্রিয় করুন—এগুলি বাতিল এবং দুর্বল।
- শক্তিশালী সাইফার স্যুট চয়ন করুন। AES-GCM বা ChaCha20-Poly1305-এর মতো AEAD সাইফার পছন্দ করুন। CBC মোড এবং RC4 এড়িয়ে চলুন।
- ফরওয়ার্ড সিক্রেসি সক্ষম করুন। ECDHE কী এক্সচেঞ্জ ব্যবহার করুন।
- OCSP স্ট্যাপলিং সক্ষম করুন। সার্ভার একটি ক্যাশে করা OCSP প্রতিক্রিয়া অন্তর্ভুক্ত করে, ক্লায়েন্ট-সাইড লেটেন্সি এবং গোপনীয়তা লিক হ্রাস করে।
- HSTS হেডার সেট করুন। ভবিষ্যতের ভিজিটের জন্য ব্রাউজারগুলিকে HTTPS ব্যবহার করতে বাধ্য করুন।
- HTTP থেকে 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:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305';
ssl_prefer_server_ciphers off;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 1d;
ssl_session_tickets off;
ssl_stapling on;
ssl_stapling_verify on;
resolver 8.8.8.8;
add_header Strict-Transport-Security "max-age=63072000" always;
location / {
proxy_pass http://localhost:3000;
}
}
server {
listen 80;
server_name example.com;
return 301 https://$host$request_uri;
}
SSL Labs-এর SSL Test বা testssl.sh-এর মতো সরঞ্জাম দিয়ে আপনার কনফিগারেশন পরীক্ষা করুন। A গ্রেডের লক্ষ্য রাখুন, কিন্তু যদি আপনাকে পুরানো ক্লায়েন্টদের সমর্থন করতে হয় তবে তাদের ভাঙার ব্যয়ে নিখুঁত স্কোরের পিছনে ছুটবেন না।
সাধারণ ত্রুটি এবং কীভাবে এড়াবেন
- মেয়াদোত্তীর্ণ সার্টিফিকেট: নবায়ন স্বয়ংক্রিয় করুন এবং মেয়াদ পর্যবেক্ষণ করুন। একটি মেয়াদোত্তীর্ণ সার্টিফিকেট আপনার সাইট ডাউন করতে পারে।
- মিশ্র বিষয়বস্তু: একটি HTTPS পৃষ্ঠায় HTTP সংস্থান লোড করলে সতর্কতা ট্রিগার হয় এবং কার্যকারিতা ভেঙে যায়। আপেক্ষিক URL বা সর্বত্র HTTPS ব্যবহার করুন।
- দুর্বল প্রোটোকল: TLS 1.0/1.1 বাতিল। আপনার কনফিগারেশন আপডেট করুন।
- অনুপস্থিত মধ্যবর্তী সার্টিফিকেট: সার্ভারকে অবশ্যই সম্পূর্ণ চেইন পাঠাতে হবে (রুট ছাড়া)। অনুপস্থিত মধ্যবর্তী সার্টিফিকেট কিছু ক্লায়েন্টে বিশ্বাস ত্রুটি সৃষ্টি করে।
- অনুপযুক্ত রিডাইরেক্ট: কোনো বিষয়বস্তু পরিবেশন করার আগে HTTP থেকে HTTPS-এ রিডাইরেক্ট করুন এবং স্থায়ী রিডাইরেক্টের জন্য 301 ব্যবহার করুন।
সচরাচর জিজ্ঞাসিত প্রশ্ন
HTTPS এবং TLS-এর মধ্যে পার্থক্য কী?
HTTPS হল TLS-এর উপর HTTP। TLS হল ক্রিপ্টোগ্রাফিক প্রোটোকল যা এনক্রিপশন, প্রমাণীকরণ এবং অখণ্ডতা প্রদান করে। TLS ছাড়া HTTPS থাকতে পারে না।
www এবং non-www এর জন্য কি আলাদা সার্টিফিকেট প্রয়োজন?
আপনি একটি একক সার্টিফিকেটের সাবজেক্ট অল্টারনেটিভ নেম (SAN) ক্ষেত্রে উভয়ই অন্তর্ভুক্ত করতে পারেন। বেশিরভাগ CA ডিফল্টভাবে বা একটি সাধারণ কনফিগারেশনের মাধ্যমে উভয়ই কভার করে সার্টিফিকেট ইস্যু করে।
আমার TLS সার্টিফিকেট কত ঘন ঘন রোটেট করা উচিত?
CA-এর বৈধতার সময়কাল অনুসরণ করুন—Let's Encrypt-এর জন্য 90 দিন। ক্রন জব বা systemd টাইমার দিয়ে নবায়ন স্বয়ংক্রিয় করুন। প্রাইভেট কী compromised হলে অবিলম্বে রোটেট করুন।
আপনার ওয়েব ট্র্যাফিক পরিদর্শন করতে প্রস্তুত? অ্যাক্সেস লগ পার্স করতে এবং HTTPS অনুরোধ, স্ট্যাটাস কোড এবং সম্ভাব্য সমস্যাগুলি যাচাই করতে Nginx Log Analyzer ব্যবহার করুন।