learn

نصب SSL در Nginx روی Ubuntu 22.04 با Let’s Encrypt

راهنمای فعال‌سازی HTTPS روی سرور مستقل Nginx، با کنترل دامنه و آزمون تمدید گواهی.

نصب SSL در Nginx ارتباط مرورگر و وب‌سرور را با HTTPS رمزگذاری می‌کند. در این راهنما برای Ubuntu 22.04 از Certbot و Let’s Encrypt استفاده می‌کنیم. گواهی معتبر جایگزین به‌روزرسانی برنامه، کنترل دسترسی یا رفع آسیب‌پذیری سایت نیست.

پیش‌نیاز نصب SSL در Nginx

این مراحل برای سرور مستقلی است که Nginx را خودتان مدیریت می‌کنید. در هاست اشتراکی یا سرور دارای کنترل‌پنل، ابتدا از سازوکار SSL همان پنل استفاده کنید؛ تغییر مستقیم فایل‌های تولیدشدهٔ پنل ممکن است با تنظیمات آن تداخل داشته باشد.

کاربر دارای sudo، دامنهٔ تحت کنترل شما و یک سایت HTTP پاسخ‌گو لازم است. رکورد A باید به IPv4 درست اشاره کند. اگر AAAA دارید، مسیر IPv6 نیز باید به همین سایت برسد؛ طبق راهنمای IPv6، رکورد اشتباه می‌تواند اعتبارسنجی را شکست دهد.

دامنه، پورت و بلوک سایت را بررسی کنید

در بلوک فعال سایت، server_name باید شامل نامی باشد که برایش گواهی می‌خواهید. example.com در فرمان‌های این صفحه نمونه است و باید جایگزین شود. www را فقط وقتی اضافه کنید که DNS و پاسخ وب آن آماده باشد.

برای روش HTTP-01، دسترسی ورودی پورت ۸۰ لازم است؛ برای استفاده از HTTPS پورت ۴۴۳ نیز باید باز باشد. قوانین فایروال را بدون حذف مجوز SSH اصلاح کنید. خاموش کردن کامل فایروال راه‌حل مناسب این مرحله نیست.

sudo nginx -t

مطابق مستندات Nginx، آزمون باید موفق شود. اگر تنظیم بلوک سایت را تغییر داده‌اید، فقط پس از رفع خطا آن را بارگذاری مجدد کنید:

sudo systemctl reload nginx

Certbot را با یک روش نصب نگه دارید

ابتدا وجود Certbot و روش نصب فعلی آن را بررسی کنید. نصب بستهٔ apt و snap در کنار هم می‌تواند باعث اجرای نسخهٔ ناخواسته شود. اگر نصب فعلی کار می‌کند، بدون برنامهٔ مهاجرت آن را حذف نکنید.

command -v certbot
certbot --version
systemctl list-timers --all

در نصب تازه و با آماده بودن snapd، راهنمای رسمی Certbot برای Nginx روش snap را ارائه می‌کند:

sudo snap install --classic certbot

در ادامه مسیر کامل نسخهٔ snap را می‌نویسیم تا وابسته به یک پیوند نمادین قدیمی نباشیم. اگر از نصب موجود با روش دیگری استفاده می‌کنید، مسیر فرمان را با همان نصب تطبیق دهید.

دریافت گواهی برای نام واقعی سایت

sudo /snap/bin/certbot --nginx -d example.com

این روش علاوه بر دریافت گواهی می‌تواند تنظیم HTTPS را در Nginx انجام دهد. پیام‌های تعاملی، شرایط سرویس و نام‌های انتخاب‌شده را بخوانید. تنها برای نام‌هایی درخواست بدهید که کنترل و DNS آن‌ها تأیید شده است. برای نام دوم معتبر می‌توان گزینهٔ جداگانهٔ -d www.example.com افزود.

HTTPS و تغییر مسیر را آزمایش کنید

آدرس HTTPS را باز کنید و نام دامنه، تاریخ اعتبار و زنجیرهٔ گواهی را ببینید. سپس نسخهٔ HTTP و تغییر مسیر مورد نظر را آزمایش کنید. وجود گواهی به‌تنهایی ثابت نمی‌کند که همهٔ صفحات و فایل‌ها با HTTPS بارگذاری می‌شوند؛ هشدار محتوای مخلوط را هم بررسی کنید.

اگر CDN یا پراکسی دارید، گواهی لبه و گواهی سرور مبدأ دو بخش متفاوت‌اند. موفقیت یکی، سلامت دیگری را اثبات نمی‌کند. همچنین هیچ امتیاز امنیتی مشخصی را بدون آزمون واقعی فرض نکنید.

تمدید خودکار و هشدار انقضا

sudo /snap/bin/certbot renew --dry-run
systemctl list-timers --all

آزمون تمدید باید موفق باشد و زمان‌بند مربوط به نصب Certbot فعال بماند. نام دقیق آن به روش نصب بستگی دارد. وجود زمان‌بند را بررسی کنید و در کنار آن کرون تکراری نسازید. مدت اعتبار و زمان تمدید را از گواهی و نسخهٔ نصب‌شده بخوانید؛ یک عدد ثابت را برای همیشه معیار قرار ندهید.

Let’s Encrypt ارسال ایمیل انقضای گواهی را از ژوئن ۲۰۲۵ متوقف کرده است. بنابراین پایش مستقل انقضا و رسیدگی به خطاهای تمدید لازم است.

اگر اعتبارسنجی شکست خورد

DNS، IPv6، پورت ۸۰، بلوک سایت و پاسخ مسیر چالش را بررسی کنید. HTTP-01 برای گواهی wildcard مناسب نیست؛ آن مورد به DNS-01 نیاز دارد. در روش DNS نیز تمدید خودکار باید جداگانه طراحی شود و کلید API فقط دسترسی لازم را داشته باشد.

مطالعهٔ مرتبط

بازبینی فنی: ۱۴ آبان ۱۴۰۵. تاریخ انتشار اولیه و نشانی قبلی حفظ شده‌اند.

مطالب مرتبط

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

فهرست مطالب