تغییرات اخیر

در اینجا اطلاعیه‌ها، نسخه‌ها و تغییرات جدید لیارا فهرست می‌شوند.

نحوه دریافت SSL در Nginx در سرور مجازی اوبونتو Ubuntu با Let’s Encrypt


۱۵ بهمن ۱۴۰۳

مقدمه

Let’s Encrypt یک مرجع صدور گواهینامه (Certificate Authority – CA) است که راهکاری ساده برای دریافت و نصب گواهینامه‌های رایگان TLS/SSL فراهم می‌کند و در نتیجه، امکان اتصال امن HTTPS را روی سرورهای وب فعال می‌سازد. این سرویس با ارائه یک کلاینت نرم‌افزاری به نام Certbot، فرایند دریافت و نصب گواهینامه را به‌شدت ساده می‌کند و تلاش می‌کند تا بیشتر مراحل مورد نیاز را به‌صورت خودکار انجام دهد. در حال حاضر، کل فرایند دریافت و نصب گواهینامه روی هر دو وب‌سرور Apache و Nginx کاملاً خودکار است.

در این آموزش، با استفاده از Certbot یک گواهینامه SSL رایگان برای Nginx در Ubuntu دریافت خواهیم کرد و تنظیمات مربوط به تمدید خودکار گواهینامه را انجام می‌دهیم. همچنین، به جای ویرایش فایل پیش‌فرض Nginx، از یک فایل پیکربندی جداگانه برای سرور مجازی استفاده خواهیم کرد. پیشنهاد می‌کنیم برای هر دامنه یک فایل پیکربندی اختصاصی در Nginx ایجاد کنید؛ زیرا این کار از وقوع خطاهای رایج، جلوگیری می‌کند و در عین حال، فایل‌های پیش‌فرض را به عنوان یک پیکربندی پشتیبان، حفظ می‌کند.

پیش‌نیازها

برای دنبال کردن این آموزش، به موارد زیر نیاز خواهید داشت:

  • یک سرور مجازی Ubuntu که با دنبال کردن آموزش راه‌اندازی اولیه سرور برای Ubuntu، راه‌اندازی شده و شامل یک کاربر غیر root با دسترسی sudo و یک فایروال فعال است؛ برای این کار، می‌توانید از سرور مجازی لیارا، استفاده کنید.
  • یک دامنه ثبت‌شده. در این آموزش از example.com به‌عنوان نام دامنه استفاده خواهد شد.
  • تنظیم دو رکورد DNS زیر برای سرور خود. اگر از سامانه مدیریت دامنه لیارا، استفاده می‌کنید، لطفاً به مستندات DNS آن، مراجعه کنید تا جزئیات مربوط به شیوه‌ی اضافه کردن رکوردها را ببینید.
    • یک رکورد A که example.com را به آدرس IP عمومی سرور شما ارجاع دهد.
    • یک رکورد A که www.example.com را به آدرس IP عمومی سرور شما ارجاع دهد.
  • نصب Nginx با دنبال کردن آموزش نصب Nginx بر روی Ubuntu. مطمئن شوید که یک بلوک سرور برای دامنه خود دارید. در این آموزش از /etc/nginx/sites-available/example.com به‌عنوان نمونه استفاده خواهد شد.

در ادامه، بخوانید:

  • مرحله اول: نحوه نصب Certbot در سرور مجازی Ubuntu
  • مرحله دوم: نحوه پیکربندی و تایید پیکربندی در Nginx
  • مرحله سوم: نحوه اجازه‌دادن به HTTPS از طریق فایروال
  • مرحله چهارم: نحوه دریافت گواهینامه SSL
  • مرحله پنجم: نحوه تایید تمدید خودکار Certbot
  • نتیجه‌گیری

مرحله اول: نحوه نصب Certbot در سرور مجازی Ubuntu

Certbot توصیه می‌کند که از پکیج snap برای نصب آن، استفاده کنید. پکیج‌های snap تقریباً روی تمام توزیع‌های لینوکس کار می‌کنند، اما نیاز است که ابتدا snapd را نصب کنید تا بتوانید پکیج‌های snap را مدیریت کنید. Ubuntu از snaps پشتیبانی می‌کند، بنابراین می‌توانید با اطمینان از به‌روز بودن snapd خود، شروع کنید:

sudo snap install core; sudo snap refresh core

اگر روی یک سرور کار می‌کنید که قبلاً نسخه قدیمی‌تری از certbot روی آن، نصب شده بود، باید آن را در ابتدا، حذف کنید:

sudo apt remove certbot

پس از آن، می‌توانید پکیج certbot را نصب کنید:

sudo snap install --classic certbot

در نهایت، می‌توانید دستور certbot را از دایرکتوری نصب شده snap به path خود لینک کنید تا بتوانید فقط با تایپ certbot آن را اجرا کنید. این کار بهتر است برای جلوگیری از تداخلات دستوری، در همه پکیج‌ها استفاده نشود، اما پکیج‌های snap به‌طور پیش‌فرض؛ کمترین تداخل را دارند:

sudo ln -s /snap/bin/certbot /usr/bin/certbot

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

مرحله دوم: نحوه پیکربندی و تایید پیکربندی در Nginx

Certbot نیاز دارد که بلوک سرور صحیح را در پیکربندی Nginx پیدا کند تا بتواند SSL را به‌طور خودکار، پیکربندی کند. به‌طور خاص، Certbot این کار را با جستجوی دستور server_name انجام می‌دهد که با دامنه‌ای که برای آن گواهینامه درخواست می‌کنید، مطابقت داشته باشد.

اگر مرحله تنظیم بلوک سرور در آموزش نصب Nginx را دنبال کرده‌اید، باید یک بلوک سرور برای دامنه خود در مسیر /etc/nginx/sites-available/example.com داشته باشید که در آن بلوک، دستور server_name به‌درستی تنظیم شده باشد. برای بررسی این موضوع، فایل پیکربندی دامنه خود را با استفاده از nano یا ویرایشگر متن مورد علاقه خود باز کنید:

sudo nano /etc/nginx/sites-available/example.com

دستور server_name موجود را پیدا کنید. باید به شکل زیر باشد:

...
server_name example.com www.example.com;
...

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

sudo nginx -t

اگر با خطایی مواجه شدید، فایل بلوک سرور را دوباره باز کرده و بررسی کنید که هیچ اشتباه تایپی یا کاراکتر گمشده‌ای وجود نداشته باشد. پس از اینکه سینتکس پیکربندی شما صحیح شد، Nginx را برای بارگذاری پیکربندی جدید دوباره راه‌اندازی کنید:

sudo systemctl reload nginx

حالا، Certbot می‌تواند بلوک سرور صحیح را پیدا کرده و به‌طور خودکار آن را به‌روزرسانی کند. در مرحله بعد، فایروال را به‌روزرسانی می‌کنیم تا ترافیک HTTPS اجازه عبور داشته باشد.

مرحله سوم: نحوه اجازه‌دادن به HTTPS از طریق فایروال

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

sudo ufw status

خروجی احتمالاً به این شکل خواهد بود، به این معنی که در حال حاضر فقط ترافیک HTTP اجازه ورود به سرور وب را دارد:

Status: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere                  
Nginx HTTP                 ALLOW       Anywhere                  
OpenSSH (v6)               ALLOW       Anywhere (v6)             
Nginx HTTP (v6)            ALLOW       Anywhere (v6)

برای مجاز کردن ترافیک HTTPS، باید پروفایل Nginx Full را فعال کرده و مجوز پروفایل Nginx HTTP را حذف کنید:

sudo ufw allow 'Nginx Full'
sudo ufw delete allow 'Nginx HTTP'

حالا وضعیت فایروال را دوباره بررسی کنید:

sudo ufw status

خروجی، باید مشابه زیر باشد:

Status: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere
Nginx Full                 ALLOW       Anywhere
OpenSSH (v6)               ALLOW       Anywhere (v6)
Nginx Full (v6)            ALLOW       Anywhere (v6)

حالا که فایروال به درستی پیکربندی شد، در مرحله بعد Certbot را اجرا می‌کنیم تا گواهینامه‌های SSL را دریافت کنیم.

مرحله چهارم: نحوه دریافت گواهینامه SSL

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

sudo certbot --nginx -d example.com -d www.example.com

این دستور، Certbot را با پلاگین Nginx اجرا کرده و از -d برای تعیین نام دامنه‌هایی که گواهینامه باید برای آن‌ها معتبر باشد، استفاده می‌کند. هنگام اجرای این دستور، از شما موارد زیر، خواسته می‌شود:

  • یک آدرس ایمیل وارد کنید.
  • با شرایط خدمات، موافقیت کنید.

پس از تکمیل این مراحل، پیامی دریافت خواهید کرد که نشان می‌دهد فرایند با موفقیت انجام شده است و مسیر ذخیره گواهینامه‌های شما را مشخص می‌کند:

IMPORTANT NOTES:
Successfully received certificate.
Certificate is saved at: /etc/letsencrypt/live/your_domain/fullchain.pem
Key is saved at: /etc/letsencrypt/live/your_domain/privkey.pem
This certificate expires on 2022-06-01.
These files will be updated when the certificate renews.
Certbot has set up a scheduled task to automatically renew this certificate in the background.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
If you like Certbot, please consider supporting our work by:
* Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate
* Donating to EFF: https://eff.org/donate-le

اکنون، گواهینامه‌های SSL شما با موفقیت دریافت، نصب و بارگذاری شدند. حالا پیکربندی Nginx به‌طور خودکار تمام درخواست‌های وب را به HTTPS هدایت می‌کند. وب‌سایت خود را رفرش کنید و نماد قفل را در مرورگر بررسی کنید تا مطمئن شوید که سایت شما به درستی ایمن شده است. برای ارزیابی امنیت سرور خود، می‌توانید از تست SSL Labs استفاده کنید. این تست معمولاً امتیاز A را به گواهینامه‌های صحیح اختصاص می‌دهد. در مرحله بعد، فرایند تمدید خودکار گواهینامه را آزمایش می‌کنیم.

مرحله پنجم: نحوه تایید تمدید خودکار Certbot

گواهینامه‌های Let’s Encrypt فقط ۹۰ روز اعتبار دارند. این محدودیت، برای تشویق کاربران به خودکارسازی فرایند تمدید گواهینامه، اعمال شده است. خوشبختانه، بسته Certbot که نصب کرده‌ایم، این کار را برای ما انجام می‌دهد. Certbot به‌طور خودکار یک تایمر در سیستم ایجاد می‌کند که روزانه دو بار اجرا می‌شود و هر گواهینامه‌ای که کمتر از ۳۰ روز تا انقضای آن باقی مانده باشد را تمدید می‌کند. برای بررسی وضعیت این تایمر، دستور زیر را اجرا کنید:

sudo systemctl status snap.certbot.renew.service

خروجی باید چیزی شبیه به این باشد:

○ snap.certbot.renew.service - Service for snap application certbot.renew
     Loaded: loaded (/etc/systemd/system/snap.certbot.renew.service; static)
     Active: inactive (dead)
TriggeredBy: ● snap.certbot.renew.timer

برای اطمینان از اینکه تمدید خودکار گواهینامه به‌درستی کار می‌کند، می‌توانید یک اجرای آزمایشی (dry run) انجام دهید:

sudo certbot renew --dry-run

اگر این دستور بدون خطا اجرا شود، یعنی تنظیمات تمدید خودکار، به‌درستی کار می‌کند. هر زمان که لازم باشد، Certbot گواهینامه‌های شما را تمدید کرده و Nginx را مجدداً بارگذاری می‌کند تا تغییرات اعمال شوند. اگر به هر دلیلی فرایند تمدید خودکار ناموفق باشد، Let’s Encrypt یک ایمیل هشدار به آدرسی که هنگام ثبت گواهینامه وارد کرده‌اید، ارسال می‌کند و شما را از نزدیک شدن به زمان انقضا مطلع می‌سازد. اکنون سرور شما به‌طور کامل ایمن شده و گواهینامه‌های SSL به‌صورت خودکار تمدید خواهند شد!

نتیجه‌گیری

در این آموزش، شما مراحل زیر را انجام دادید:

  • نصب کلاینت Let’s Encrypt
  • دریافت گواهینامه SSL برای دامنه خود
  • پیکربندی Nginx برای استفاده از این گواهینامه‌ها
  • تنظیم تمدید خودکار گواهینامه‌ها

اکنون وب‌سایت شما به‌طور ایمن از HTTPS پشتیبانی می‌کند و گواهینامه‌های SSL آن به‌صورت خودکار تمدید خواهند شد. اگر سؤالی درباره استفاده از Certbot دارید، مستندات رسمی Let’s Encrypt یک منبع عالی برای شروع است.

همچنین بخوانید: نحوه نصب انجین ایکس، MySQL و پی اچ پی (LEMP) بر روی سرور مجازی لینوکس

call
تلفن واحد فروش: ۳۳۵۵۷۶۱۹-۰۲۵ (روزهای کاری ۹ الی ۱۷)