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

نرم‌افزار Certbot برای ایمن‌سازی وب‌سرور آپاچی

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

پیش‌نیازها

برای تکمیل مراحل این آموزش به موارد زیر احتیاج خواهید داشت.

  • یک سرور دبیان 10 با تنظیمات اولیه از جمله یک کاربر غیر روت با دسترسی sudo و فایروال.
  • یک نام دامین ثبت‌شده. در این آموزش از عنوان your_domain به عنوان نمونه استفاده می‌شود. در همین حال، شما می‌توانید یک دامین در Namecheap خریداری کنید، یک دامین رایگان از Freenom دریافت نمایید و یا از مرجع ثبت دامین دلخواه خودتان استفاده کنید.
  • هر دو تنظیمات رکورد DNS زیر برای سرور.
    • یک رکورد A با ارجاع your_domain به آدرس IP عمومی سرور
    • یک رکورد A با ارجاع your_domain به آدرس IP عمومی سرور
  • نصب آپاچی در دبیان 10. حتماً دقت کنید که یک فایل هاست مجازی برای دامین خود داشته باشید. در این آموزش از فایل نمونه /etc/apache2/sites-available/your_domain.conf استفاده خواهیم کرد.

گام ۱) نصب نر‌م‌افزار Certbot

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

نکته: در حال حاضر، نرم‌افزار Certbot به صورت پیش‌فرض در منبع نرم‌افزاری Debian در دسترس قرار ندارد. ولی این امکان وجود دارد که منبع buster-backports را در فایل /etc/apt/sources.list برای این نرم‌افزار با استفاده از APT تنظیم کنید.

البته این را هم درنظر بگیرید که Backport ها بسته‌های آزمایشی و ناپایدار از منابع دبیان هستند که برای استفاده در توزیع‌های پایدار دبیان بازسازی شده‌اند. این بسته‌ها به شکل مناسب، تست نشده‌اند و ممکن است همیشه بروز نباشند. بر این اساس نسخه Backport از نرم‌افزار Certbot برابر 0.31  است و این در حالی است که نسخه کنونی این نرم‌افزار در زمان نگارش مقاله، 1.09 محسوب می‌شود. یکی از تفاوت‌های قابل‌ذکر این دو نسخه از نرم‌افزار این است که در نسخه 0.31 پروتکل‌های TLS v1.0 و TLS v1.1 فعال هستند. این دو پروتکل در بسیاری از مرورگرها  منسوخ شده‌اند و فعال‌بودن آنها ممکن است یک نقطه‌ آسیب‌پذیر امنیتی ایجاد کند. البته امکان تغییر تنظیمات پیش‌فرض وجود دارد، ولی استفاده از نسخه Backport می‌تواند در بروزرسانی و کارآیی نرم‌افزار Certbot اختلال ایجاد کند.

در همین حال و تا زمانی که آخرین ورژن Certbot در منابع Debian APT قرار گیرند، گزینه snappy در دسترس شما خواهد بود. snappy یک برنامه مدیریت بسته برای سیستم‌های لینوکس بوده که استفاده از آن در اسناد راهنمای Certbot نیز توصیه شده است. بسته‌های نصب‌شده به وسیله این ابزار تحت فرمت snap قرار می‌گیرند.

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

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

sudo apt update

حالا نوبت به نصب بسته snapd است.

sudo apt install snapd

پس از اجرای این فرمان، از شما خواسته می‌شود که نصب snapd و متعلقات آن را تأیید کنید. این کار را با فشردن کلید Y و سپس Enter انجام دهید.

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

sudo snap install core

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

sudo snap refresh core

حالا می‌توانید با فرمان زیر certbot snap را نصب کنید.

به خاطر داشته باشید که snap ها را می‌توان در سه سطح مجزا در سیستم نصب کرد. به عنوان مثال، بسیاری از snap ها در سطح  پیش‌فرض –strict نصب می‌شوند که آنها را از دسترسی به فایل‌های سیستمی یا شبکه منع می‌کند. امّا Certbot برنامه ای است که می‌بایست برخی ویرایش‌ها را در تنظیمات انجام دهد و گواهینامه‌ها را به درستی صادر کند. برای این منظور از گزینه –classic در فرمان snap استفاده می‌شود. در نتیجه، بسته snap می‌تواند همان دسترسی بسته‌های معمولی را داشته باشد.

sudo snap install --classic certbot

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

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

حالا نرم‌افزار Certbot نصب شده و آماده استفاده است. امّا ابتدا باید از تنظیمات مناسب آپاچی مطمئن شویم.

گام ۲) تنظیمات اولیه گواهینامه SSL

Certbot باید بتواند هاست مجازی مناسب را در تنظیمات آپاچی پیدا کند تا امکان تنظیم اتوماتیک SSL فراهم گردد. برای این منظور، پارامتر ServerName مطابق با دامین مورد تقاضا بررسی می‌شود.

اگر قبلاً تنظیمات اولیه هاست مجازی را در نصب آپاچی انجام داده باشید، احتمالاً بخش VirtualHost را برای دامین در فایل تنظیمات /etc/apache2/sites-available/your_domain.conf را دارید. همچنین احتمالاً پارامتر ServerName به‌درستی برایتان تنظیم شده است. برای بررسی این موضوع، فایل هاست مجازی دامین را با استفاده از ویرایشگر Nano یا هر ویرایشگر متنی دلخواه باز کنید.

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

حالا خط مربوط به ServerName را پیدا کنید. این خط باید چیزی شبیه به زیر با نام دامین خودتان به جای your_domain باشد.

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

...

ServerName your_domain;

...

اگر به این صورت نبود، پارامتر ServerName را برای ارجاع به دامین خودتان بروزرسانی کنید. سپس فایل را ذخیره کرده و ویرایشگر را ببندید. در صورتی که از Nano استفاده می‌کنید، این کار با فشرده کلیدهای Ctrl+X، Y و سپس Enter انجام می‌شود.

در ادامه، قالب ویرایش تنظیمات خود را تأیید کنید.

sudo apache2ctl configtest

اگر خطای قالبی وجود نداشته، احتمالاً با خروجی زیر مواجه می‌شوید.

. . .

Syntax OK

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

sudo systemctl reload apache2

در نتیجه، حالا نرم‌افزار Certbot می‌تواند بلوک VirtualHost را پیدا کرده و بروزرسانی کند. در مرحله بعد، باید فایروال برای مجوّز به ترافیک Https تنظیم کنیم.

گام ۳) مجوّز به HTTPS از طریق فایروال

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

شما می‌توانید با تایپ فرمان زیر، تنظیمات موجود را مشاهده کنید.

sudo ufw status

اگر تنظیمات اولیه آپاچی در دبیان 10 را به‌درستی انجام داده باشید، احتمالاً با خروجی زیر روبرو می‌شوید. این نتیجه نشان می‌دهد که تنها ترافیک HTTP در وب‌سرور مجوّز دارد.

Status: active

To                         Action      From

--                         ------      ----

OpenSSH                    ALLOW       Anywhere

WWW                        ALLOW       Anywhere

OpenSSH (v6)               ALLOW       Anywhere (v6)

WWW (v6)                   ALLOW       Anywhere (v6)

برای اضافه‌کردن مجوّز ترافیک HTTPS، از گزینه allow برای پروفایل “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)

در ادامه، نرم‌افزار Certbot را اجرا و گواهینامه‌هایمان را دریافت می‌کنیم.

گام ۴) دریافت یک گواهینامه SSL از Let’s Encrypt

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

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

این فرمان باعث اجرای certbot با استفاده از پلاگین –apache می ‌شود. همچنین گزینه -d باعث مشخص‌کردن نام‌های دامین برای دسترسی گواهینامه‌ها می‌گردد.

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

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

خروجی

. . .

IMPORTANT NOTES:

-Congratulations! Your certificate and chain have been saved at:

/etc/letsencrypt/live/your_domain/fullchain.pem

Your key file has been saved at:

/etc/letsencrypt/live/your_domain/privkey.pem

Your cert will expire on 2021-01-20. 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 تنها برای ۹۰ روز در دسترس باقی می‌مانند. این موضوع برای تشویق کاربران برای اتوماتیک کردن فرآیند بروزرسانی گواهینامه‌های آنهاست. بسته certbot که در اینجا نصب کدیم، با اضافه کردن یک اسکریپت renew به /etc/cron.d این کار را برای ما انجام می‌دهد. این اسکریپت ۲ بار در روز اجرا می‌شود و به صورت خودکار، هر گواهینامه‌ای را که ۳۰ روز تا تاریخ انقضا فاصله داشته باشد، تجدید می‌کند.

برای بررسی وضعیت فرآیند بروزرسانی، می‌توان گزینه dry را با certbot استفاده کنید.

sudo certbot renew --dry-run

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

جمع‌بندی

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