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

در این راهنما، از Certbot برای دریافت گواهینامه‌ی SSL رایگان برای Nginx در Ubuntu 20.04 و تنظیم آن برای تمدید خودکار استفاده خواهیم کرد.

پیش نیازها

  • یک سرور Ubuntu 20.04 با یک کاربر غیر root و دسترسی sudo و فایروال.

  • یک دامنه؛ در این راهنما از

    example.com
    استفاده می‌کنیم.

  • تنظیم رکوردهای DNS برای دامنه و زیردامنه www با اشاره به آدرس IP عمومی سرور

  • نصب Nginx با دنبال کردن شیوه نصب Nginx در Ubuntu 20.04 و ایجاد یک بلوک سرور مانند

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

گام نخست: نصب Certbot

اولین قدم برای استفاده از Let’s Encrypt و دریافت گواهی SSL نصب نرم افزار Certbot روی سرور است.

Certbot و پلاگین Nginx آن را با

apt
نصب کنید:

sudo apt install certbot python3-certbot-nginx

گام دوم: بررسی پیکربندی Nginx

Certbot باید بتواند بلوک سرور یا Server Block صحیح را در پیکربندی Nginx پیدا کند تا بتواند به‌طور خودکار SSL را تنظیم کند.

اگر مرحله‌ی راه‌اندازی بلوک سرور را در آموزش نصب Nginx دنبال کرده‌ باشید، یک بلوک سرور برای دامنه ‌تان در مسیری مانند

etc/nginx/sites-available/example.com/
از قبل روی سرور تنظیم شده است.

برای بررسی آن، فایل پیکربندی دامنه خود را با استفاده از ویرایش‌گر متن دل‌خواه‌تان باز کنید:

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 اکنون می‌تواند بلوک صحیح را پیدا کرده و به‌طور خودکار آن را به روز کند.

گام سوم: تنظیمات فایروال

اگر فایروال

ufw
را فعال کرده اید، باید تنظیمات را برای اجازه دادن به عبور ترافیک HTTPS تنظیم کنید.

می‌توانید تنظیمات فعلی را با دستور زیر مشاهده کنید:

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'

اکنون وضعیت فایروال باید به شکل زیر باشد:

OutputStatus: active

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

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

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

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

توجه داشته باشید که به جای example.com باید نام دامنه‌ی خودتان را بنویسید.

اگر این اولین باری است که

certbot
را اجرا می‌کنید، از شما خواسته می‌شود یک آدرس ایمیل وارد کنید و با شرایط خدمات موافقت کنید. پس از انجام این کار،
certbot
با سرور Let’s Encrypt ارتباط برقرار می‌کند، سپس چالشی را اجرا می‌کند تا تایید کند دامنه‌ای که برای آن درخواست گواهی داده‌اید در اختیار خودتان است.

در پایان این فرآیند پیامی مبنی بر موفقیت آمیز بودن به شما نمایش داده می‌شود.

OutputIMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at:
   /etc/letsencrypt/live/example.com/fullchain.pem
   Your key file has been saved at:
   /etc/letsencrypt/live/example.com/privkey.pem
   Your cert will expire on 2020-08-18. To obtain a new or tweaked
   version of this certificate in the future, simply run certbot again
   with the "certonly" option. To non-interactively renew *all* of
   your certificates, run "certbot renew"
 - 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

اکنون می‌توانید سایت خود را با

//:https
در ابتدای آن باز کنید تا مرورگر سایت را ایمن نمایش دهد. هم‌چنین می‌توانید با استفاده از SSL Labs اعتبار گواهی‌تان را بررسی کنید.

برای راهنمایی بیش‌تر درباره‌ی استفاده از Certbot، می‌توانید به مستندات آن مراجعه کنید.