HTTPS এবং TLS আসলে কীভাবে কাজ করে: হ্যান্ডশেক ব্যাখ্যা
আপনি URL-এর আগে https:// টাইপ করেছেন, প্যাডলক দেখেছেন, এবং এগিয়ে গেছেন। কিন্তু যখন রাত ২টায় একটি সার্টিফিকেটের মেয়াদ শেষ হয়, মিক্সড-কন্টেন্ট ওয়ার্নিং আপনার চেকআউট পেজ ভেঙে দেয়, বা একজন ক্লায়েন্ট জিজ্ঞাসা করে কেন তাদের API কল TLS এরর দিয়ে ব্যর্থ হচ্ছে, তখন "প্যাডলক মানে এটি সুরক্ষিত" আর কাজের উত্তর থাকে না। এই নিবন্ধটি ব্যাখ্যা করে যে একটি HTTPS সংযোগের সময় ওয়্যারে আসলে কী ঘটে এবং কীভাবে অনুমান ছাড়াই এটি কনফিগার করবেন।
HTTPS কী HTTP-তে যোগ করে
HTTPS হলো সাধারণ HTTP যা একটি TLS (ট্রান্সপোর্ট লেয়ার সিকিউরিটি) সেশনের ভিতরে বহন করা হয়। TLS তিনটি নির্দিষ্ট গ্যারান্টি প্রদান করে:
- গোপনীয়তা — ট্রাফিক এনক্রিপ্ট করা হয়, তাই মধ্যস্থতাকারীরা এটি পড়তে পারে না।
- অখণ্ডতা — ট্রানজিটে টেম্পারিং সনাক্ত হয় এবং সংযোগ ব্যর্থ হয়।
- প্রমাণীকরণ — সার্ভার প্রমাণ করে যে এটি উপস্থাপিত সার্টিফিকেটের জন্য প্রাইভেট কী নিয়ন্ত্রণ করে।
লক্ষ্য করুন সেই তালিকায় কী নেই: HTTPS বলে না যে সার্ভার বিশ্বাসযোগ্য কিনা, অ্যাপ্লিকেশনে দুর্বলতা আছে কিনা, বা ডেটা বিশ্রামে নিরাপদ কিনা। এটি পাইপকে সুরক্ষিত করে, এন্ডপয়েন্টকে নয়।
TLS হ্যান্ডশেক, ধাপে ধাপে
হ্যান্ডশেক হলো সেই আলোচনা যা কোনো HTTP বাইট প্রবাহিত হওয়ার আগে ঘটে। TLS 1.3-এ এটি একটি রাউন্ড ট্রিপ নেয়; TLS 1.2-এ দুটি লাগে। এখানে TLS 1.3 প্রবাহ সহজ ভাষায়:
- ClientHello — ক্লায়েন্ট সমর্থিত TLS সংস্করণ, সাইফার স্যুটের তালিকা, একটি র্যান্ডম নন্স এবং একটি Diffie-Hellman কী এক্সচেঞ্জের জন্য কী শেয়ার (সাধারণত X25519) পাঠায়।
- ServerHello — সার্ভার একটি সংস্করণ এবং সাইফার স্যুট বেছে নেয়, নিজের কী শেয়ার ফেরত দেয়, এবং তার সার্টিফিকেট চেইন প্লাস হ্যান্ডশেক ট্রান্সক্রিপ্টের উপর একটি স্বাক্ষর পাঠায়।
- কী ডেরিভেশন — উভয় পক্ষ Diffie-Hellman এক্সচেঞ্জ থেকে শেয়ার্ড সিক্রেট গণনা করে। এফেমেরাল কী মানে সেশন কী অনন্য এবং ফরওয়ার্ড সিক্রেসি বজায় থাকে: পরে সার্ভারের দীর্ঘমেয়াদী কী compromised হলেও রেকর্ড করা ট্রাফিক ডিক্রিপ্ট হয় না।
- Finished — উভয় পক্ষ ট্রান্সক্রিপ্টের উপর একটি MAC পাঠায়। যদি কিছু পরিবর্তিত হয়, হ্যান্ডশেক বাতিল হয়।
- অ্যাপ্লিকেশন ডেটা — HTTP অনুরোধ এবং প্রতিক্রিয়া শেয়ার্ড সিক্রেট থেকে প্রাপ্ত সিমেট্রিক কী দিয়ে এনক্রিপ্ট করা হয়।
সার্টিফিকেট হলো যেখানে প্রমাণীকরণ বাস করে। সার্ভার তার প্রাইভেট কী দিয়ে হ্যান্ডশেক স্বাক্ষর করে; ক্লায়েন্ট সার্টিফিকেটের পাবলিক কী ব্যবহার করে সেই স্বাক্ষর যাচাই করে, তারপর একটি বিশ্বস্ত রুট CA-এর বিরুদ্ধে সার্টিফিকেট নিজেই যাচাই করে, হোস্টনেম, বৈধতার তারিখ এবং প্রত্যাহার স্ট্যাটাস পরীক্ষা করে।
সিমেট্রিক বনাম অ্যাসিমেট্রিক: কেন উভয়ই ব্যবহৃত হয়
অ্যাসিমেট্রিক ক্রিপ্টোগ্রাফি (RSA বা ECDSA) ধীর কিন্তু কী বিতরণ সমাধান করে। সিমেট্রিক সাইফার (AES-GCM, ChaCha20-Poly1305) দ্রুত কিন্তু একটি শেয়ার্ড কী প্রয়োজন। TLS শুধুমাত্র হ্যান্ডশেকের সময় অ্যাসিমেট্রিক ক্রিপ্টো ব্যবহার করে একটি সিমেট্রিক সেশন কী প্রতিষ্ঠা করতে, তারপর সেই কী দিয়ে বাল্ক ডেটা এনক্রিপ্ট করে। এই কারণেই একটি আধুনিক TLS 1.3 সংযোগ দ্রুত: একটি রাউন্ড ট্রিপ, তারপর বাকি সবকিছুর জন্য সস্তা AES বা ChaCha20।
সাইফার স্যুট এবং আসলে কী গুরুত্বপূর্ণ
একটি সাইফার স্যুট হলো অ্যালগরিদমের একটি নামযুক্ত বান্ডেল। TLS 1.3-এ তালিকাটি ছোট এবং সমস্ত বিকল্প নিরাপদ বলে বিবেচিত; TLS 1.2-এ আপনাকে সাবধানে বেছে নিতে হবে। একটি দ্রুত তুলনা:
| দিক | TLS 1.2 | TLS 1.3 |
|---|---|---|
| হ্যান্ডশেক রাউন্ড ট্রিপ | ২ (বা পুনরায় শুরুতে ১) | ১ (পুনরায় শুরুতে 0-RTT) |
| কী এক্সচেঞ্জ | RSA বা (EC)DHE | শুধুমাত্র এফেমেরাল (EC)DHE |
| ফরওয়ার্ড সিক্রেসি | ঐচ্ছিক | সর্বদা |
| লিগ্যাসি সাইফার (CBC, RC4) | ভুল কনফিগার হলে সম্ভব | সরানো হয়েছে |
ব্যবহারিক টেকঅ্যাওয়ে: শুধুমাত্র TLS 1.2 এবং 1.3 সক্রিয় করুন, TLS 1.0/1.1 নিষ্ক্রিয় করুন, এবং কম হ্যান্ডশেক খরচের জন্য ECDSA সার্টিফিকেট পছন্দ করুন। আপনার সার্ভার বা রিভার্স প্রক্সিকে স্যুট অর্ডার বেছে নিতে দিন; ২০২৪-যুগের সফ্টওয়্যারে বেশিরভাগ ডিফল্ট যুক্তিসঙ্গত।
একটি বাস্তব সংযোগ কীভাবে পরিদর্শন করবেন
আপনাকে ডকুমেন্টেশন বিশ্বাস করতে হবে না — আপনার নিজের এন্ডপয়েন্ট যাচাই করুন। openssl s_client আলোচিত সংস্করণ, সাইফার এবং সার্টিফিকেট চেইন দেখায়:
openssl s_client -connect example.com:443 -servername example.com -tls1_3 </dev/null
Protocol এবং Cipher লাইনগুলি দেখুন, তারপর মেয়াদ এবং SAN এন্ট্রিগুলির জন্য সার্টিফিকেট চেইন আউটপুট পরীক্ষা করুন। যদি চেইন অসম্পূর্ণ হয়, কিছু ক্লায়েন্ট ব্যর্থ হবে যখন ব্রাউজার সফল হবে, যা "এটি Chrome-এ কাজ করে কিন্তু curl-এ নয়" বাগের একটি ক্লাসিক উৎস।
সাধারণ HTTPS ভুল কনফিগারেশন
- মিসিং ইন্টারমিডিয়েট সার্টিফিকেট — সার্ভার শুধুমাত্র তার লিফ সার্ট পাঠায়। ব্রাউজার ইন্টারমিডিয়েট আনতে পারে, কিন্তু API ক্লায়েন্টরা প্রায়ই আনবে না।
- মিক্সড কন্টেন্ট — একটি HTTPS পেজ HTTP-এর মাধ্যমে একটি স্ক্রিপ্ট বা ছবি লোড করে; ব্রাউজার এটি ব্লক বা ডাউনগ্রেড করে। আপনার ব্রাউজার কনসোল দিয়ে অডিট করুন।
- HSTS নেই —
Strict-Transport-Securityছাড়া, HTTP-এর মাধ্যমে প্রথম অনুরোধটি রিডাইরেক্ট হওয়ার আগে ইন্টারসেপ্ট করা যেতে পারে। - দুর্বল বা পুরনো প্রোটোকল সংস্করণ — একটি লিগ্যাসি ক্লায়েন্টের জন্য TLS 1.0 সক্রিয় রাখা প্রতিটি সংযোগকে নীরবে দুর্বল করে।
- সার্টিফিকেটের মেয়াদ শেষ — নবায়ন স্বয়ংক্রিয় করুন; একটি ম্যানুয়াল ক্যালেন্ডার রিমাইন্ডার কোনো কৌশল নয়।
একটি যুক্তিসঙ্গত সার্ভার কনফিগারেশন
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_prefer_server_ciphers off;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 1d;
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
}
fullchain.pem ফাইলটি হলো যা মিসিং-ইন্টারমিডিয়েট সমস্যা প্রতিরোধ করে। পোর্ট 80 থেকে রিডাইরেক্টটি একটি পৃথক সার্ভার ব্লকে রাখুন যাতে ACME চ্যালেঞ্জের জন্য HTTP এখনও কাজ করে।
HTTPS কী সুরক্ষা দেয় না
একবার অনুরোধ আপনার সার্ভারে পৌঁছালে, TLS শেষ। ইনজেকশন ত্রুটি, ভাঙা অ্যাক্সেস নিয়ন্ত্রণ, লগে ফাঁস হওয়া গোপনীয়তা এবং ভুল কনফিগার করা CORS সবই ট্রান্সপোর্ট লেয়ারের উপরে বাস করে। TLS-কে বেসলাইন হিসেবে বিবেচনা করুন, নিরাপত্তা কর্মসূচি হিসেবে নয়। যদি আপনি একটি ঘটনা ডিবাগ করছেন, ট্রান্সপোর্ট সমস্যা (হ্যান্ডশেক ব্যর্থতা, মেয়াদোত্তীর্ণ সার্ট) এবং অ্যাপ্লিকেশন সমস্যা (500s, খারাপ পেলোড) তাড়াতাড়ি আলাদা করুন — তাদের সম্পূর্ণ ভিন্ন সমাধান রয়েছে।
সাধারণ প্রশ্ন
HTTPS কি URL পাথ এবং কোয়েরি স্ট্রিং এনক্রিপ্ট করে?
হ্যাঁ। HTTPS-এ, পাথ এবং কোয়েরি স্ট্রিং সহ সম্পূর্ণ HTTP অনুরোধ এনক্রিপ্টেড TLS রেকর্ডের ভিতরে থাকে। তবে, হোস্টনেম (SNI) এবং গন্তব্য IP হ্যান্ডশেকের সময় দৃশ্যমান থাকে যদি না Encrypted Client Hello ব্যবহার করা হয়।
TLS 1.3 কি সর্বদা TLS 1.2-এর চেয়ে দ্রুত?
সাধারণত, কারণ এটি একটি রাউন্ড ট্রিপ সাশ্রয় করে এবং 0-RTT পুনরায় শুরু সমর্থন করে। উচ্চ-লেটেন্সি সংযোগে পার্থক্যটি লক্ষণীয়; স্থানীয় নেটওয়ার্কে এটি সামান্য। বড় সুবিধা হলো TLS 1.3 লিগ্যাসি সাইফার বিকল্পগুলি সম্পূর্ণভাবে সরিয়ে দেয়।
যদি আমি HTTP থেকে HTTPS-এ রিডাইরেক্ট করি তবে কি আমার এখনও HSTS প্রয়োজন?
হ্যাঁ। একটি রিডাইরেক্ট শুধুমাত্র তখনই সাহায্য করে যখন ব্রাউজার আপনার সার্ভারে পৌঁছেছে। HSTS ব্রাউজারকে ভবিষ্যতের অনুরোধের জন্য HTTP সম্পূর্ণভাবে এড়িয়ে যেতে বলে, সেই উইন্ডোটি বন্ধ করে যেখানে প্রথম অনুরোধটি ইন্টারসেপ্ট করা যেতে পারে।
যখন আপনি একটি ডিপ্লয়মেন্ট অডিট করছেন এবং সার্টিফিকেটের বিবরণ পরীক্ষা করতে বা একটি ক্যাপচার করা হ্যান্ডশেক দ্রুত ডিকোড করতে চান, তখন একটি টার্মিনাল-ভিত্তিক ওয়ার্কফ্লো হাতের কাছে রাখুন — এবং যদি আপনি একটি দলের জন্য ফলাফলগুলি নথিভুক্ত করছেন, তাহলে কাঁচা openssl আউটপুটকে একটি পঠনযোগ্য প্রতিবেদনে পরিণত করার একটি দ্রুত উপায় হলো Markdown editor।