بازگشت به مجله
گواهی SSLتیم فنی هایوهاست۹ دقیقه مطالعه

نصب گواهی SSL روی Nginx با Let's Encrypt

افزونه Nginx در Certbot گواهی را میگیرد و پیکربندی را هم خودش تنظیم میکند؛ به شرط اینکه یک نکته درباره server_name را رعایت کرده باشید.

اتصال امن

اگر روی سرور Nginx دارید، لازم نیست سرویس را متوقف کنید یا فایل های پیکربندی را دستی ویرایش کنید. افزونه اختصاصی Certbot خودش بلاک مربوط به دامنه شما را پیدا میکند، گواهی را میگیرد و تنظیمات لازم را اضافه میکند. کل فرایند بدون قطعی انجام میشود و در پایان، ریدایرکت از HTTP به HTTPS هم برقرار است.

1

تفاوت این روش با حالت standalone

در حالت standalone، خود Certbot یک وب سرور موقت بالا می آورد و به همین دلیل باید Nginx متوقف شود. اینجا برعکس است: افزونه از همان Nginx در حال اجرا برای اعتبارسنجی استفاده میکند، پس هیچ قطعی سرویسی رخ نمیدهد.

مزیت دوم این است که کار پیکربندی را هم انجام میدهد. مسیر گواهی، تنظیمات TLS و در صورت تمایل ریدایرکت به HTTPS را خودش به فایل شما اضافه میکند. اگر ترجیح میدهید هیچ ابزاری به فایل های پیکربندی شما دست نزند، همان حالت standalone انتخاب بهتری است.

2

پیشنیازها

قبل از شروع، این موارد باید آماده باشند. تقریبا تمام خطاهای این فرایند از یکی از همین ها می آید و بررسی آنها چند ثانیه بیشتر طول نمیکشد.

بررسی اینکه دامنه به سرور اشاره میکند
dig +short example.com
dig +short www.example.com
بررسی سالم بودن پیکربندی فعلی
sudo nginx -t
sudo systemctl status nginx
  • دامنه و زیردامنه ها باید به آی پی همین سرور اشاره کنند.
  • پورت های ۸۰ و ۴۴۳ باید از بیرون قابل دسترسی باشند.
  • یک بلاک server با دامنه شما باید از قبل وجود داشته باشد.
3

نصب Certbot و افزونه Nginx

افزونه در بسته جداگانه ای قرار دارد و باید همراه Certbot نصب شود. روی نسخه های امروزی اوبونتو و دبیان، نصب از مخزن رسمی کاملا کافی است.

اگر هنوز روی اوبونتو ۲۰.۰۴ هستید توجه داشته باشید که دوره پشتیبانی استاندارد آن به پایان رسیده است. برای سروری که ترافیک واقعی دارد، ارتقا به نسخه های جدیدتر ارزشش را دارد.

نصب
sudo apt update
sudo apt install certbot python3-certbot-nginx
4

نکته کلیدی: مقدار server_name باید درست باشد

این رایج ترین دلیل شکست این روش است. افزونه برای اینکه بفهمد کدام بلاک را ویرایش کند، دنبال دامنه شما در دستور server_name میگردد. اگر این مقدار خالی باشد، به شکل زیرخط تعریف شده باشد یا با دامنه ای که در دستور Certbot میدهید یکی نباشد، افزونه بلاک را پیدا نمیکند و کار متوقف میشود.

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

باز کردن فایل سایت
sudo nano /etc/nginx/sites-available/example.com
مقدار درست
server_name example.com www.example.com;
اعمال تغییر قبل از اجرای Certbot
sudo nginx -t
sudo systemctl reload nginx
5

تنظیم فایروال

اگر UFW فعال است، پروفایل کامل Nginx را باز کنید تا هر دو پورت ۸۰ و ۴۴۳ اجازه عبور داشته باشند. اگر قبلا فقط پروفایل HTTP را باز کرده بودید، آن قانون اضافی را حذف کنید تا فهرست تمیز بماند.

باز کردن هر دو پورت
sudo ufw allow 'Nginx Full'
sudo ufw delete allow 'Nginx HTTP'
sudo ufw status
6

گرفتن و نصب گواهی

حالا دستور اصلی را اجرا کنید. Certbot ایمیل و پذیرش شرایط را میپرسد و در پایان از شما میپرسد که آیا ریدایرکت خودکار از HTTP به HTTPS اضافه شود یا نه. در تقریبا تمام موارد گزینه ریدایرکت انتخاب درستی است.

بعد از اتمام، فایل پیکربندی شما تغییر کرده و بلاک جدیدی برای پورت ۴۴۳ به آن اضافه شده است.

اجرای Certbot با افزونه Nginx
sudo certbot --nginx -d example.com -d www.example.com
اگر فقط گواهی میخواهید و ویرایش خودکار را نمیخواهید
sudo certbot certonly --nginx -d example.com -d www.example.com
بررسی گواهی های نصب شده و تاریخ انقضا
sudo certbot certificates
7

تمدید خودکار و آزمایش آن

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

آزمایش تمدید را حتما یک بار انجام دهید. اگر این دستور بدون خطا تمام شد، یعنی نود روز بعد هم بدون دخالت شما کار خواهد کرد.

بررسی تایمر
systemctl list-timers | grep certbot
شبیه سازی تمدید
sudo certbot renew --dry-run
8

یک هشدار درباره ویرایش فایل تنظیمات TLS

افزونه یک فایل با تنظیمات پیشنهادی TLS میسازد و آن را در پیکربندی شما فراخوانی میکند. وسوسه میشوید که برای سخت گیرانه تر کردن تنظیمات، مستقیم همان فایل را ویرایش کنید. این کار را نکنید؛ در به روز رسانی های بعدی Certbot این فایل بازنویسی میشود و تغییرات شما از بین میرود.

هر تنظیم اضافه ای را در بلاک server خودتان بنویسید تا پایدار بماند. اگر HSTS را فعال میکنید، توجه داشته باشید که مرورگرها آن را برای مدت تعیین شده به خاطر میسپارند؛ اگر بعدا مشکلی در گواهی پیش بیاید، کاربران تا پایان آن مدت نمیتوانند سایت را باز کنند. با مقدار کوتاه شروع کنید.

فایلی که نباید مستقیم ویرایش شود
/etc/letsencrypt/options-ssl-nginx.conf
افزودن HSTS در بلاک server خودتان
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
  • بعد از هر تغییر، پیکربندی را با nginx -t تست کنید.
  • اگر Nginx جلوی Apache است، گواهی را فقط روی Nginx نصب کنید.
  • برای گواهی وایلدکارت این افزونه کافی نیست و باید از اعتبارسنجی DNS استفاده کنید.

پرسش های پرتکرار

چرا Certbot بلاک مربوط به دامنه من را پیدا نمیکند؟

افزونه بر اساس مقدار server_name بلاک را پیدا میکند. اگر این مقدار خالی باشد یا با دامنه ای که در دستور میدهید یکی نباشد، عملیات متوقف میشود.

آیا میتوان بدون تغییر پیکربندی فقط گواهی گرفت؟

بله. با استفاده از certonly همراه افزونه، Certbot فقط گواهی را دریافت میکند و فایل های پیکربندی شما را ویرایش نمیکند.

چرا تنظیمات TLS من بعد از به روز رسانی از بین رفت؟

فایل options-ssl-nginx.conf در به روز رسانی های Certbot بازنویسی میشود. تنظیمات اختصاصی را در بلاک server خودتان بنویسید تا پایدار بماند.

به راهنمای بیشتری نیاز دارید؟

تیم پشتیبانی هایوهاست برای انتخاب و مدیریت سرویس کنار شماست.

گفتگو با پشتیبانی

ادامه یادگیری

مشاهده همه