تغییرات اخیر

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

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


۱۲ اسفند ۱۴۰۳

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

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

پیش‌نیازها

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

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

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

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

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

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

برای نصب Certbot از طریق Snap در Debian، ابتدا بایدsnapd را روی سرور خود نصب کنید. snapd یک سرویس پس‌زمینه (daemon) است که برای نصب، استفاده و مدیریت بسته‌های Snap مورد نیاز است. با نصب بسته snapd، دستور snap نیز روی سرور شما در دسترس قرار می‌گیرد.

برای نصب snapd ابتدا مخازن را بروزرسانی کنید:

sudo apt update

پس از آن بسته snapd را نصب کنید:

sudo apt install snapd

بعد از اجرای دستور بالا، از شما خواسته می‌شود برای تائید نصب snapd و تمام وابستگی‌هایش، کلید Y را بزنید.

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

sudo snap install core

حالا بسته core را به‌روزرسانی کنید. با این‌کار آخرین نسخه snapd روی سرور شما نصب خواهد شد.

sudo snap refresh core

دقت کنید که بسته‌های snap سطوح مختلفی دارند. بیشتر آن‌ها به‌صورت --strict نصب می‌شوند و دسترسی محدودی به سیستم دارند. اما Certbot برای پیکربندی گواهینامه‌ها نیاز به دسترسی بیشتری دارد، بنابراین باید با گزینه --classic نصب شود.

برای نصب Certbot از بسته snap، دستور زیر را وارد کنید:

sudo snap install --classic certbot

مراحل نصب، فایل اجرایی Certbot را در مسیر /snap/bin/ قرار می‌دهد. برای اینکه بتوانید دستور certbot را از هر جایی در سیستم اجرا کنید، به‌صورت زیر یک لینک در /usr/bin/ ایجاد کنید:

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

حالا که Certbot آماده استفاده است، در مراحل بعد باید مطمئن شوید که SSL برای Apache به درستی تنظیم شده است.

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

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

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

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

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

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

ServerName your_domain;

پس از تغییر فایل، اگر دستور ServerName هنوز به دامنه شما اشاره نمی‌کند، آن را به دامنه خود تغییر دهید. سپس فایل را ذخیره کرده و از ویرایشگر خارج شوید.

اگر از nano استفاده کردید، با فشردن CTRL + X، سپس Y و در نهایت ENTER این کار را انجام دهید.

در مرحله بعد، درستی دستورات پیکربندی را بررسی کنید:

sudo apache2ctl configtest

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

Syntax OK

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

sudo systemctl reload apache2

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

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

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

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

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

sudo ufw status

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

Status: active

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

اکنون برای مجاز کردن ترافیک HTTPS، باید پروفایل WWW Full را مجاز کنید و دسترسی اضافی پروفایل WWW را حذف کنید:

sudo ufw allow 'WWW Full'
sudo ufw delete allow 'WWW'

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

sudo ufw status
Status: active

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

در مرحله بعد بیایید cetrbot را اجرا کنیم و گواهینامه‌ها را دریافت کنیم.

مرحله چهارم:  اخذ گواهینامه SSL

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

sudo certbot --apache -d your_domain -d www.your_domain

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

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

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

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

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-10-31.
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 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

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
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 شما با موفقیت دریافت، نصب و بارگذاری شدند. حالا  وب‌سایت خود را رفرش کنید و نماد قفل را در مرورگر بررسی کنید تا مطمئن شوید که سایت شما به درستی ایمن شده است. برای ارزیابی امنیت سرور خود، می‌توانید از تست SSL Labs استفاده کنید. این تست معمولاً امتیاز A را به گواهینامه‌های صحیح اختصاص می‌دهد. در مرحله بعد، فرایند تمدید خودکار گواهینامه را آزمایش می‌کنیم.

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

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

sudo certbot renew --dry-run

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

جمع بندی

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

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

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

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