تغییرات اخیر

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

نحوه ایمن سازی Apache با Let’s Encrypt در Ubuntu 


۲۹ بهمن ۱۴۰۳

مقدمه

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

در این آموزش از وبلاگ لیارا، شما یاد خواهید گرفت که چگونه با استفاده از Certbot یک گواهینامه SSL رایگان برای وب‌سرور Apache در اوبونتو دریافت کنید و آن را به‌صورت خودکار تمدید کنید تا نیازی به انجام دستی این کار نباشد. ناگفته نماند که در این آموزش به جای ویرایش فایل پیکربندی پیش‌فرض آپاچی، از یک فایل میزبان مجازی (Virtual Host) جداگانه برای تنظیم وب‌سایتی که قرار است با Let’s Encrypt ایمن شود، استفاده می‌کنیم.

پیش نیازها

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

  • یک سرور Ubuntu که شامل یک کاربر غیر root با دسترسی sudo و یک فایروال فعال است، همچنین می توانید راهنمای آموزش راه اندازی سرور در اوبونتو در لیارا را دنبال کنید.
  • یک دامنه ثبت شده نیاز دارید که در این آموزش از your_domain به عنوان نام دامنه استفاده خواهد شد. شما می توانید یک دامنه از سایت‌هایی مانند Namecheap بخرید یا به‌صورت رایگان از Freenom بگیرید، یا از هر ثبت‌کننده دامنه (domain registrar) که می‌خواهید استفاده کنید.
  • تنظیم دو رکورد DNS زیر برای سرور خود، اگر از سامانه مدیریت دامنه لیارا، استفاده می‌کنید، لطفاً به مستندات DNS آن، مراجعه کنید تا جزئیات مربوط به شیوه‌ی اضافه کردن رکوردها را ببینید.
    • یک رکورد A که your_domain را به آدرس IP عمومی سرور متصل کند.
    • یک رکورد A که www.your_domain را به آدرس عمومی سرور متصل کند.
    • برای جزئیات نحوه اضافه کردن این رکوردها، لطفا به نحوه تنظیم DNS Server در مستندات لیارا مراجعه کنید.
  • نصب Apache. اگر هنوز وب سرور Apache را نصب نکرده اید، می توانید راهنمای نصب Apache در اوبونتو را مطالعه کنید؛ سپس مطمئن شوید که برای دامنه خود یک فایل میزبان مجازی در Apache ایجاد کرده اید. در این آموزش مسیر فایل /etc/apache2/sites-available/your_domain.conf انتخاب شده است.

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

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

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

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

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

sudo apt update

پس از آن شما به دو پکیج نیاز دارید: certbot و python3-certbot-apache

پکیج دوم یک افزونه است که Certbot را با Apache یکپارچه می‌کند و به شما امکان می‌دهد با یک دستور، به‌صورت خودکار گواهی SSL را دریافت کرده و HTTPS را در وب سرور خود پیکربندی کنید:

sudo apt install certbot python3-certbot-apache

در نهایت با فشردن کلید Y و سپس ENTER نصب شما تائید و تکمیل می شود. 

اکنون Certbot بر روی سرور شما نصب شده است. در مرحله بعد، پیکربندی Apache را بررسی خواهیم کرد تا مطمئن شویم که میزبان مجازی (Virtual Host) به‌درستی تنظیم شده است. این کار تضمین می‌کند که اسکریپت کلاینت Certbot قادر به شناسایی دامنه‌های شما بوده و وب سرور شما را به‌طور خودکار برای استفاده از گواهی SSL تازه ایجاد شده، پیکربندی کند.

مرحله دوم: پیکربندی میزبان مجازی Apache

برای اینکه Certbot بتواند به‌طور خودکار SSL را برای وب سرور شما دریافت و پیکربندی کند، باید میزبان مجازی (Virtual Host) صحیح در فایل‌های پیکربندی Apache پیدا شود. نام دامنه‌های سرور شما از دستورات ServerName و ServerAlias که در بلوک پیکربندی VirtualHost تعریف شده‌اند، استخراج می‌شود.

اگر مراحل تنظیم میزبان مجازی در راهنمای نصب Apache را دنبال کرده باشید، باید یک بلوک VirtualHost برای دامنه خود در فایل /etc/apache2/sites-available/your_domain.conf داشته باشید که دستورات ServerName و ServerAlias به درستی تنظیم شده باشند.

برای اطمینان از این موضوع، فایل میزبان مجازی دامنه‌تان را با استفاده از nano باز کنید:

sudo nano /etc/apache2/sites-available/your_domain.conf

در این فایل، خطوط مربوط به ServerName و ServerAlias را پیدا کنید. این خطوط باید به شکل زیر باشند:

 ServerName your_domain  
 ServerAlias www.your_domain

اگر ServerName و ServerAlias شما به همین شکل تنظیم شده‌اند، می‌توانید از ویرایشگر خارج شده و به مرحله بعد بروید. در غیر این صورت، پیکربندی میزبان مجازی خود را مطابق با مثال به‌روزرسانی کنید. اگر از nano استفاده می‌کنید، می‌توانید با فشردن CTRL+X، سپس Y و در نهایت ENTER تغییرات خود را ذخیره و از برنامه خارج شوید.

سپس دستور زیر را اجرا کنید تا تغییرات پیکربندی را اعتبارسنجی کنید:

sudo apache2ctl configtest

حالا باید پیام Syntax OK را دریافت کنید. اگر خطایی مشاهده کردید، دوباره فایل میزبان مجازی را باز کنید و  مطمئن شوید اشتباه تایپی و یا کاراکتر ناقص در فایل وجود ندارد. پس از اطمینان از صحت نحوی فایل پیکربندی، Apache را مجدداً بارگذاری کنید تا تغییرات اعمال شوند:

sudo systemctl reload apache2

در نهایت با انجام این تغییرات، Certbot می تواند بلوک VirtualHost صحیح را پیدا کرده و به‌روزرسانی کند.

در مرحله بعد، شما فایروال را به‌روز می‌کنید تا ترافیک HTTPS مجاز شود.

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

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

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

sudo ufw status

اگر طبق راهنمای نصب Apache روی سرور لینوکس عمل کرده باشید، خروجی‌ای شبیه به این دریافت می‌کنید؛ یعنی در حال حاضر فقط ترافیک HTTP (پورت 80) مجاز است.

Status: active

To                        Action       From
--                         ------         ----
OpenSSH             ALLOW       Anywhere                  
Apache                ALLOW       Anywhere             
OpenSSH (v6)      ALLOW       Anywhere (v6)             
Apache (v6)         ALLOW       Anywhere (v6)

حالا برای اینکه ترافیک HTTPS مجاز شود، کافیست پروفایل Apache Full را طبق دستور زیر به فایروال اضافه کنید:

sudo ufw allow 'Apache Full'

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

sudo ufw delete allow 'Apache'

در نهایت برای اطمینان از اعمال تغییرات، مجددا وضعیت فایروال را بررسی کنید:

sudo ufw status

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

Status: active

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

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

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

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

sudo certbot --apache

هنگام اجرای این دستور چند مورد را از شما خواسته می شود:

یک آدرس ایمیل وارد کنید.

Saving debug log to /var/log/letsencrypt/letsencrypt.log
Enter email address (used for urgent renewal and security notices)
 (Enter 'c' to cancel): you@your_domain

این ایمیل برای دریافت هشدارهای امنیتی می باشد. پس از وارد کردن ایمیل، کلیدENTER رابزنید تا به مرحله بعدی بروید.

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

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Please read the Terms of Service at
https://letsencrypt.org/documents/LE-SA-v1.2-November-15-2017.pdf. You must
agree in order to register with the ACME server at
https://acme-v02.api.letsencrypt.org/directory
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(Y)es/(N)o: Y

در این مرحله، لازم است شرایط استفاده‌ی Let’s Encrypt را مطالعه و تأیید نمایید. برای تأیید، کلید Y را فشار داده و سپس ENTER را بزنید.

حالا از شما خواسته می‌شود دامنه‌هایی که می‌خواهید برای آن‌ها HTTPS فعال شود را مشخص نمایید. نام‌های دامنه به‌طور خودکار از تنظیمات Virtual Host در Apache استخراج می‌شوند؛ بنابراین لازم است اطمینان حاصل کنید که تنظیمات ServerName و ServerAlias به درستی پیکربندی شده‌اند.

اگر قصد دارید HTTPS را برای تمامی دامنه‌های لیست‌شده فعال کنید، کافی است ورودی را خالی رها کرده و کلید ENTER را فشار دهید. در غیر این صورت، شماره‌های مربوط به دامنه‌های مورد نظر را وارد نمایید.

Which names would you like to activate HTTPS for?
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1: your_domain
2: www.your_domain
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Select the appropriate numbers separated by commas and/or spaces, or leave input
blank to select all options shown (Enter 'c' to cancel):

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

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-07-10.
These files will be updated when the certificate renews.
Certbot has set up a scheduled task to automatically renew this certificate in the background.

Deploying certificate
Successfully deployed certificate for your_domain to /etc/apache2/sites-available/your_domain-le-ssl.conf
Successfully deployed certificate for www.your_domain.com to /etc/apache2/sites-available/your_domain-le-ssl.conf
Congratulations! You have successfully enabled HTTPS on https:/your_domain and https://www.your_domain.com

اکنون گواهی شما در تنظیمات Apache نصب و بارگذاری شدند. برای ارزیابی امنیت سرور خود، می‌توانید از تست SSL Labs استفاده کنید. این تست معمولاً امتیاز A را به گواهینامه‌های صحیح اختصاص می‌دهد. در مرحله بعد، فرایند تمدید خودکار گواهینامه را آزمایش می‌کنیم.

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

گواهی‌های Let’s Encrypt تنها ۹۰ روز اعتبار دارند. این محدودیت، کاربران را به خودکارسازی روند تمدید گواهی و همچنین تضمین انقضای سریع‌تر گواهی‌های سو‌استفاده شده یا کلیدهای سرقت‌شده تشویق می کند. بسته certbot که نصب کرده‌ایم، روند تمدید گواهی‌ها را به‌طور خودکار مدیریت می‌کند؛ یرا یک اسکریپت تمدید در مسیر /etc/cron.d قرار داده شده است که توسط یک سرویس systemctl به نام certbot.timer کنترل می‌شود. این اسکریپت دو بار در روز اجرا شده و به‌طور خودکار هر گواهی که کمتر از سی روز تا انقضا باقی مانده باشد را تمدید می‌کند.

برای بررسی وضعیت این سرویس و اطمینان از فعال بودن آن، دستور زیر را اجرا نمایید:

sudo systemctl status certbot.timer

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

● certbot.timer - Run certbot twice daily
     Loaded: loaded (/lib/systemd/system/certbot.timer; enabled; vendor preset: enabled)
     Active: active (waiting) since Mon 2022-04-11 20:52:46 UTC; 4min 3s ago
    Trigger: Tue 2022-04-12 00:56:55 UTC; 4h 0min left
   Triggers: ● certbot.service

Apr 11 20:52:46 jammy-encrypt systemd[1]: Started Run certbot twice daily.

برای اطمینان از اینکه تمدید خودکار گواهینامه به‌درستی کار می‌کند، دستور زیر را بزنید:

sudo certbot renew --dry-run

اگر دستور بدون خطا اجرا شود، خروجی مشابه زیر خواهید داشت:

Saving debug log to /var/log/letsencrypt/letsencrypt.log

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Processing /etc/letsencrypt/renewal/your_domain.conf
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Account registered.
Simulating renewal of an existing certificate for your_domain and www.your_domain.com

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Congratulations, all simulated renewals succeeded:
  /etc/letsencrypt/live/your_domain/fullchain.pem (success)
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

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

نتیجه گیری

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

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

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

برچسب‌ها: