Certbot کلاینت پیشنهادی ACME برای گرفتن گواهی رایگان از Let’s Encrypt است. در مستندات رسمی Ubuntu Server (صفحهٔ Obtain TLS certificates) نصب از snap، صدور با افزونهٔ nginx، مسیر فایلهای گواهی در /etc/letsencrypt/live/ و تمدید خودکار توضیح داده شده است. راهنمای دستورالعمل Certbot (EFF) هم همین مسیر snap و sudo certbot --nginx را برای لینوکس توصیه میکند.
آموزش Certbot روی اوبونتو با nginx؛ از صفر تا قفل سبز
پیشنیازهایی که خیلیها جا میاندازند: دامنه ثبتشده با رکورد DNS (A یا AAAA) که به IP عمومی همین سرور اشاره کند؛ پورت ۸۰ از اینترنت باز باشد (چالش پیشفرض HTTP-01 از بیرون به سرور درخواست میزند)؛ nginx نصب و برای همان دامنه در /etc/nginx/sites-enabled/ فعال باشد؛ و با SSH بهعنوان کاربر دارای sudo وارد سرور شوید. نقشها را جدا کنید: کار روی میزبان اوبونتو (سرور) است؛ مرورگر روی لپتاپ فقط نتیجه را چک میکند.
۱) نصب Certbot با snap
- اگر قبلاً Certbot را با apt نصب کردهاید، برای جلوگیری از تداخل با snap آن را حذف کنید (مثال رایج: sudo apt-get remove certbot).
- نصب رسمی پیشنهادی اوبونتو و EFF: sudo snap install --classic certbot.
- دستور را در PATH در دسترس کنید: sudo ln -s /snap/bin/certbot /usr/local/bin/certbot.
- با certbot --version مطمئن شوید همان باینری snap اجرا میشود.
۲) صدور گواهی و نصب روی nginx
- قبل از اولین اجرا از کانفیگ nginx بکآپ بگیرید (مستندات Certbot هم توصیه میکند؛ در صورت نیاز certbot --nginx rollback تغییرات را برمیگرداند).
- برای دامنه و www یکجا: sudo certbot --nginx -d example.com -d www.example.com — نام دامنهٔ خودتان را جایگزین کنید.
- افزونهٔ nginx بلوک server مطابق دامنه را پیدا میکند، دستورهای TLS را اضافه میکند و nginx را reload میکند.
- اگر ترجیح میدهید فقط فایل گواهی بگیرید و خودتان کانفیگ را ویرایش کنید: sudo certbot certonly --nginx یا طبق اوبونتو sudo certbot certonly --webroot -w /var/www/html -d example.com.
- چند دامنه با چند -d بهصورت SAN روی یک گواهی میآیند؛ لیست کامل دامنههای مطلوب را در همان دستور بدهید.
اگر وسط کار گیر کردید—مثلاً چالش پورت ۸۰ یا پیدا نشدن server block—همان پیام خطا را در نظرات بگذارید تا مسیر عیبیابی را دقیقتر بگوییم.
۳) فایلهای گواهی کجا هستند؟
بعد از موفقیت، Certbot فایلها را در /etc/letsencrypt/live/<domain>/ مینویسد. طبق جدول مستندات اوبونتو:
- fullchain.pem — گواهی سرور بهاضافهٔ میانیها (برای بیشتر سرویسها همین را بگذارید).
- privkey.pem — کلید خصوصی؛ هرگز به اشتراک نگذارید و در گیت commit نکنید.
- cert.pem و chain.pem — نسخههای جداگانهتر برای سناریوهای خاص.
نمونهٔ اوبونتو برای nginx:
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
۴) تمدید خودکار و تست امن
- گواهیهای Let’s Encrypt معمولاً ۹۰ روزه هستند؛ Certbot تایمر systemd نصب میکند که روزی دو بار تمدید را امتحان کند.
- وضعیت تایمر: sudo systemctl status snap.certbot.renew.timer.
- تست بدون تغییر واقعی: sudo certbot renew --dry-run.
- با افزونهٔ nginx/Apache بعد از تمدید موفق، سرویس معمولاً خودکار reload میشود؛ برای سرویسهای دیگر میتوانید هوک در /etc/letsencrypt/renewal-hooks/deploy/ بگذارید.
نکتههای امنیتی و اشتباههای رایج
- اگر پورت ۸۰ را بعد از صدور ببندید، تمدید HTTP-01 ممکن است شکست بخورد؛ برای اینترنترو لازم است در زمان تمدید هم قابل دسترس بماند.
- DNS اشتباه یا پروکسی که به سرور دیگر میرود = چالش شکست میخورد؛ اول dig/ping دامنه را با IP سرور یکی کنید.
- برای گواهی wildcard (*.example.com) باید چالش DNS-01 و پلاگین DNS استفاده شود؛ مسیر nginx معمولی HTTP-01 است.
- تأیید نهایی: در مرورگر بروید به https://yourdomain و قفل نوار آدرس را ببینید.
مرجع اصلی این راهنما صفحهٔ رسمی Ubuntu Server با عنوان Obtain TLS certificates است؛ جزئیات افزونهٔ nginx و دستور renew نیز در مستندات Certbot (EFF) آمده است. گامها را عیناً روی سرور خودتان با نام دامنهٔ واقعی تکرار کنید، نه روی لپتاپ کلاینت.
اولین دامنهای که با Certbot قفل سبز گرفتید چه بود—سایت شخصی، پنل، یا API روی VPS؟