Let's Encrypt নব্বই দিনের সার্টিফিকেট দেয় আর সেগুলো নিজে থেকেই নবায়ন করে, সেজন্যই সাজানোর এক সপ্তাহ পরে লোকে সেগুলো নিয়ে ভাবা বন্ধ করে দেয়। সমস্যা হলো স্বয়ংক্রিয় নবায়ন নীরবে ভাঙে: ত্রুটি কেউ দেখে না, আর তিন মাস পরে সাইট দর্শনার্থীদের অভ্যর্থনা জানায় ব্রাউজারের সতর্কবার্তা দিয়ে। 2025 থেকে Let's Encrypt মেয়াদ শেষের বিজ্ঞপ্তির ইমেইল পাঠানোও বন্ধ করেছে, অর্থাৎ শেষ বাইরের মনে করিয়ে দেওয়াটিও চলে গেছে।
নিচে সেসব কারণ যাতে নবায়ন কাজ করা বন্ধ করে, কম্পাঙ্কের অবরোহী ক্রমে।
1. সার্টিফিকেট নবায়ন হয়েছে আর সেবা সেটি আবার পড়েইনি
সবচেয়ে প্রচলিত। certbot renew চলেছে, নতুন ফাইল ডিস্কে আছে, আর nginx বা Apache পুরনোটি মেমরিতে ধরে রেখেছে — আর কনফিগারেশন পুনরায় লোড না হওয়া পর্যন্ত সেটিই দর্শনার্থীদের দিয়ে যাচ্ছে। আনুষ্ঠানিকভাবে সব ঠিক; আসলে সাইটে মেয়াদোত্তীর্ণ সার্টিফিকেট।
নিরাময় হলো সফল নবায়নের পরে চলা hook:
sudo certbot renew --deploy-hook "systemctl reload nginx"
এটি একবার নবায়নের ফাইলে লেখা হয় (/etc/letsencrypt/renewal/example.com.conf, [renewalparams] অংশ, renew_hook লাইন) আর তারপর নিজে থেকেই কাজ করে।
2. ওয়েব সার্ভার বদলেছে আর challenge বদলায়নি
HTTP-01 challenge-এর জন্য /.well-known/acme-challenge/ থেকে একটা ফাইল সাদামাটা HTTP-তে দিতে হয়। এটি সাধারণত এভাবে ভাঙে:
- কনফিগে HTTP থেকে HTTPS-এ শর্তহীন পুনর্নির্দেশ যোগ করা হয়েছে — challenge পুনর্নির্দেশের পেছনে গিয়ে ব্যর্থ হয়;
deny all-সহlocation ~ /\.নিয়ম এসেছে, যা বিন্দুযুক্ত প্রতিটি ডিরেক্টরি বন্ধ করে,.well-known-সহ;- সাইটের মূল সরে গেছে আর certbot-এর সেটিংসে পুরনো
--webroot-pathরয়ে গেছে; - দেশ অনুযায়ী অবরোধ বা মৌলিক প্রমাণীকরণ চালু হয়েছে আর সবার সঙ্গে যাচাইকরণ সার্ভারকেও ধরে ফেলেছে।
কনফিগে সঠিক ক্রম: আগে /.well-known/acme-challenge/-এর জন্য আলাদা location, আর তারপরেই সাধারণ পুনর্নির্দেশ।
3. টাইমার বন্ধ
নবায়ন চলে systemd টাইমার বা cron কাজ থেকে, আর দুটোর যেকোনোটিই ডিবাগ করার সময় ভুল করে বন্ধ হতে পারে বা সার্ভার সরানোর সময় হারাতে পারে।
systemctl list-timers | grep certbot
sudo certbot renew --dry-run
দ্বিতীয় কমান্ডটি আপনার কোটা খরচ না করে পরীক্ষামূলক মোডে পুরো নবায়ন চক্র চালায়। এটিই একমাত্র যাচাই যা «এটি কি এক মাস পরে নবায়ন হবে» প্রশ্নের উত্তর আগেভাগে দেয়, ঘটনার পরে নয়।
4. কোনো ডোমেইন আর এখানে দেখায় না
সার্টিফিকেট পাঁচটি ডোমেইন ঢাকে, তার একটি অন্য হোস্টে সরে গেছে, DNS বদলে গেছে। ওই ডোমেইনের যাচাইকরণ উত্তীর্ণ হওয়া বন্ধ হয়, আর certbot পুরো সার্টিফিকেট নবায়ন করে না — চারটি কর্মক্ষম ডোমেইনসহ। বাড়তি ডোমেইন সার্টিফিকেট থেকে সরাতে হয়, বার্তাসহ উপেক্ষা করা হয় না।
5. আপনি সীমার সঙ্গে ধাক্কা খেয়েছেন
Let's Encrypt একটি ডোমেইনের জন্য সপ্তাহে সার্টিফিকেটের সংখ্যা সীমিত করে। এটি সাধারণত ডিবাগ করার সময় «কাজ করল না, আরেকবার চেষ্টা করি» চক্রের ফল। পরীক্ষানিরীক্ষার জন্য staging সার্ভার আছে (--dry-run বা --test-cert), আর সেটি সীমা ফুরোনোর আগে ব্যবহার করা উচিত, পরে নয়।
যা দেওয়া হচ্ছে তা যাচাই করুন, যা রাখা আছে তা নয়
ডিস্কের ফাইলভিত্তিক প্রতিটি যাচাইয়ে একটা খুঁত আছে: ফাইল টাটকা হতে পারে আর দর্শনার্থী পুরনো সার্টিফিকেট পেতে পারে। ক্লায়েন্টের দিক থেকে দেখুন:
echo | openssl s_client -connect example.com:443 -servername example.com 2>/dev/null \
| openssl x509 -noout -dates -subject -issuer
-servername বিকল্পটি বাধ্যতামূলক: সেটি ছাড়া কয়েকটি সাইটযুক্ত সার্ভারে আপনি সেই ভার্চুয়াল হোস্টের সার্টিফিকেট পাবেন যেটি আগে আসে, আপনি যেটি বোঝাতে চেয়েছিলেন সেটি নয়। ফলাফলে notAfter হলো আসল মেয়াদ শেষের তারিখ।
এই সুযোগে শৃঙ্খলও যাচাই করুন:
echo | openssl s_client -connect example.com:443 -servername example.com -showcerts 2>/dev/null | grep -c 'BEGIN CERTIFICATE'
কেবল একটি সার্টিফিকেট থাকলে মধ্যবর্তীটি দেওয়া হচ্ছে না। ব্রাউজার সাধারণত এই ব্যবস্থা ক্ষমা করে — তারা শৃঙ্খল নিজেই গড়ে নেয় — কিন্তু curl, মোবাইল অ্যাপ্লিকেশন ও Java ক্লায়েন্ট যাচাইকরণে ব্যর্থ হবে। এটাই ক্লাসিক «আমার এখানে তো দিব্যি খোলে আর ক্রেতার কাছে কাজ করে না»।
কত দিন আগে সতর্কতা
ত্রিশ দিন প্রথম সতর্কতার জন্য যুক্তিসঙ্গত: certbot নবায়নের চেষ্টা শুরু করার সময়ও ততটাই বাকি থাকে, অর্থাৎ ততক্ষণে কিছু না ঘটলে ব্যবস্থাটি ভাঙা। চোদ্দ দিন দ্বিতীয় সতর্কতা, যাতে আজই ব্যবস্থা নিতে হয়। সাত দিন জরুরি অবস্থা।
গুরুত্বপূর্ণ হলো প্রতিটি সার্টিফিকেট একসঙ্গে দেখা, সেগুলোসহ যেগুলো Let's Encrypt থেকে আসেনি: এক বছরের জন্য কেনা সার্টিফিকেট সবচেয়ে নির্ভরযোগ্যভাবে ভুলে যাওয়া হয়, কারণ এক বছরে সবাই ভুলে যায় সেগুলো আছে কি না আর বিজ্ঞপ্তি কার মেইলবক্সে যায়। ডোমেইন, তারিখ ও বাকি দিনসহ একটি পাতা প্রশ্নটা পুরোপুরি বন্ধ করে দেয় — যেমন নিচের ডেমোতে।