آموزش نصب گواهی SSL برای Nginx با Let’s Encrypt در Ubuntu

Let’s Encrypt یکی از ارائه دهندگان گواهی امنیتی است که فراهم کننده روشی ساده برای دریافت و نصب گواهی‌های TLS/SSL برای فعال‌سازی رمزگذاری HTTPS بر روی سرور است. این ارائه دهنده با فراهم کردن یک کلاینت نرم‌افزاری به نام Certbot، تقریبا اکثرا مراحل نصب و راه‌اندازی گواهی را به طور خودکار انجام می‌دهد. در حال حاضر تمامی مراحل دریافت و نصب گواهی برای Nginx و Apache بطور کاملا خودکار صورت مییگیرد.
در این آموزش ما با استفاده از Certbot گواهی SSL رایگانی را برای Nginx در اوبونتو ۱۶.۰۴ دریافت و همچنین گواهی را به گونه‌ای تنظیم می‌کنیم که بطور خودکار اعتبار آن تمدید شود.
در این آموزش از یک بلاک Nginx متفاوت از بلاک پیش‌فرض استفاده می‌کنیم. توصیه می‌کنیم که برای هر دامین در سرور خود یک بلاک جداگانه Nginx داشته باشید تا از ایجاد مشکلات احتمالی جلوگیری شود و فایل پیش فرض به عنوان یک راهنما همیشه در دسترس باشد.

پیش نیازها

در این آموزش به موارد زیر نیاز دارید:

  • یک سرور اوبونتو ۱۶.۰۴ که تنظیمات ابتدایی آن مانند این آموزش «راه‌اندازی اولیه اوبونتو» انجام شده است و شامل یک کاربر غیر root با دسترسی sudo و یک فایروال است.
  • یک نام دامنه. در این آموزش ما از دامین example.com استفاده می‌کنیم.
  • تنظیم رکوردهای DNS برای اشاره به سرور.
    • یک رکورد A با example.com که به آدرس آی‌پی عمومی سرور اشاره می‌کند.
    • یک A رکورد با www.example.com که به آدرس آی‌پی عمومی سرور اشاره می‌کند.
  • Nginx نصب شده بر روی سرور.

قدم اول: نصب Certbot

اولین مرحله برای دریافت گواهی SSL نصب نرم افزار Certbot بر روی سرور است.
در اولین قدم مخزن Certbot را اضافه کنید:

sudo add-apt-repository ppa:certbot/certbot

با فشردن کلید اینتر دستور بالا را اجرا کنید.

سپس لیست پکیج‌ها را بروز کنید:

sudo apt-get update

پکیج Certbot را به وسیله apt-get نصب کنید.

sudo apt-get install python-certbot-nginx

اگر پکیج بالا نصب نشد می تونید از دستور زیر نصبش کنید

sudo apt-get install python3-certbot-nginx

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

قدم دوم: تایید تنظیمات 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 می‌تواند بلاک server مورد نظر را پیدا کند و بروزرسانی انجام دهد.
در قدم بعد فایروال را برای دریافت ترافیک HTTPS بروز می‌کنیم.

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

اگر فایروال ufw را فعال کرده‌اید. باید تنظیمات آن را برای انتقال ترافیک HTTPS بروز کنید. با تایپ دستور زیر تنظیمات کنونی را مشاهده کنید:

sudo ufw status

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

Output
Status: active
To Action From
-- ------ ----
OpenSSH ALLOW Anywhere
Nginx Full ALLOW Anywhere
OpenSSH (v6) ALLOW Anywhere (v6)
Nginx Full (v6) ALLOW Anywhere (v6)

برای انتقال ترافیک HTTPS پروفایل Nginx Full را در حالت پذیرش قرار دهید و پروفایل اضافی Nginx HTTP را حدف کنید:

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

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

sudo ufw status
Output
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

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

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

این دستور اجرا کننده certbot همراه با افزونه --nginx است، با استفاده از -d میتوانید دامنه‌های مختلف را برای دریافت گواهی اضافه کنید.
اگر این اولین بار است که certbot را اجرا می‌کنید، از شما ایمیل و پذیرش قوانین خواسته می‌شود. پس از آن certbot با سرور Let’s Encrypt ارتباط برقرار کرده و چالشی را برای تایید دامین درخواستی شما اجرا می‌کند.
در صورت موفقیت‌آمیز بودن، certbot از شما میپرسد که چطور می‌خواهید تنظیمات HTTPS را اعمال کنید.
۱- بدون تغییر مسیر و بدون تنظیم وب‌سرور.
۲- تغییر همه آدرس‌ها به HTTPS و تنظیم وب‌سرور بطور خودکار.

Output
Please choose whether or not to redirect HTTP traffic to HTTPS, removing HTTP access

-------------------------------------------------------------------------------
1: No redirect - Make no further changes to the webserver configuration.
2: Redirect - Make all requests redirect to secure HTTPS access. Choose this for
new sites, or if you're confident your site works on HTTPS. You can undo this
change by editing your web server's configuration.
------------------------------------------------------------------------------
Select the appropriate number [1-2] then [enter] (press 'c' to cancel):

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

Output 
IMPORTANT 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 2018-07-23. 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"
- Your account credentials have been saved in your Certbot
configuration directory at /etc/letsencrypt. You should make a
secure backup of this folder now. This configuration directory will
also contain certificates and private keys obtained by Certbot so
making regular backups of this folder is ideal.
- 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 Server Test سرور خود را تست کنید، نمره A خواهید گرفت.

در قدم آخر فرایند تمدید مجدد را آزمایش می‌کنیم.

قدم پنجم: تایید تمدید خودکار Certbot

گواهی‌‌های Let’s Encrypt تنها باری ۹۰ روز معتبر هستند و کاربران باید گواهی خود را طوری تنظیم کنند که بطور خودکار فرایند تمدید اجرا شود. پیکیجی که نصب کردیم افزودن اسکریپت etc/cron.d این کار را برای شما انجام می‌دهد. این اسکریپت دو بار در روز اجرا می‌شود و در مهلت سی روز تا پایان اعتبار، گواهی را تمدید می‌کند.
برای تست فرایند تمدید، دستور زیر را اجرا کنید:

sudo certbot renew --dry-run

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

منبع: ویوین

ارسال پاسخ

آدرس ایمیل شما منتشر نخواهد شد. فیلدهای مورد نیاز با * مشخص شده اند.پر کردن این فیلد ضروری است *