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

پیش نیازها

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

  • یک سرور اوبونتو ۱۸.۰۴ که تنظیمات ابتدایی آن مانند این آموزش «راه‌اندازی اولیه اوبونتو ۱۸.۰۴» انجام شده است و شامل یک کاربر غیر root با دسترسی sudo و یک فایروال است.
  • یک نام دامنه. در این آموزش ما از دامین example.com استفاده می‌کنیم.
  • تنظیم رکوردهای DNS برای اشاره به سرور.
    • یک رکورد A با example.com که به آدرس آی‌پی عمومی سرور اشاره می‌کند.
    • یک A رکورد با www.example.com که به آدرس آی‌پی عمومی سرور اشاره می‌کند.
  • Apache نصب شده بر روی سرور. مطمئن شوید که برای دامین خود یک virtual host ایجاد کرده‌اید. در این آموزش از مسیر etc/apache2/sites-available/example.com.conf به عنوان نمونه استفاده می‌شود.

قدم اول: نصب Certbot

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

sudo add-apt-repository ppa:certbot/certbot

با فشردن کلید اینتر دستور بالا را اجرا کنید.
پکیج Certbot را به وسیله apt نصب کنید:

sudo apt install python-certbot-apache

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

قدم دوم: تایید تنظیمات Apache 

Certbot باید بتواند virtual host صحیح سرور را در تنظیمات Apache پیدا کند تا تنظیمات SSL را بطور خودکار اعمال کند. بطور مشخص Certbot به دنبال server_name گشته که مطابق دامنه درخواستی برای اخذ گواهی است.
در تنظیمات Apache خود باید virtual host برای دامین خود در مسیر etc/apache2/sites-available/example.com.conf با server_name مشخص داشته باشید.
برای بررسی فایل virtual host دامین مورد نظر را با nano یا ویرایشگر مورد نظر خود باز کنید:

sudo nano /etc/apache2/sites-available/example.com.conf

خط server_name موجود را پیدا کنید. چیزی شبیه به خط زیر:

...
ServerName example.com;
...

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

sudo apache2ctl configtest

اگر خطایی گرفتید فایل را مجددا باز کنید و به دنبال اشتباهات تایپی بگردید. زمانی که تنظیمات صحیح بود، Apache را مجدد راه‌اندازی کنید تا تنظیمات جدید اعمال شود:

sudo systemctl reload apache2

اکنون Certbot می‌تواند virtual host و server مورد نظر را پیدا کند و بروزرسانی انجام دهد.
در قدم بعد فایروال را برای دریافت ترافیک HTTPS بروز می‌کنیم.

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

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

sudo ufw status

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

Output
Status: active
To Action From
-- ------ ----
OpenSSH ALLOW Anywhere
Apache ALLOW Anywhere
OpenSSH (v6) ALLOW Anywhere (v6)
Apache (v6) ALLOW Anywhere (v6)
view raw Output hosted with ❤ by GitHub

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

sudo ufw allow 'Apache Full'
sudo ufw delete allow 'Apache'

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

sudo ufw status

Output
Status: active
To Action From
-- ------ ----
OpenSSH ALLOW Anywhere
Apache Full ALLOW Anywhere
OpenSSH (v6) ALLOW Anywhere (v6)
Apache Full (v6) ALLOW Anywhere (v6)
view raw Output hosted with ❤ by GitHub

در قدم بعد Certbot را اجرا می‌کنیم و گواهی‌های مورد نطر را دریافت می‌کنیم.

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

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

sudo certbot --apache -d example.com -d www.example.com
view raw certbot hosted with ❤ by GitHub

این دستور اجرا کننده certbot همراه با افزونه --apache است، با استفاده از -d میتوانید دامنه‌های مختلف را برای دریافت گواهی اضافه کنید.
اگر این اولین بار است که certbot را اجرا می‌کنید، از شما ایمیل و پذیرش قوانین خواسته می‌شود. پس از آن certbot با سرور Let’s Encrypt ارتباط برقرار کرده و چالشی را برای تایید دامین درخواستی شما اجرا می‌کند.
در صورت موفقیت‌آمیز بودن، certbot از شما میپرسد که چطور می‌خواهید تنظیمات HTTPS را اعمال کنید.
1- بدون تغییر مسیر و بدون تنظیم وب‌سرور.
2- تغییر همه آدرس‌ها به 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):

گزینه مورد نظر را انتخاب کنید و اینتر را بزنید.تنظیمات اعمال شده و Apache بروز می‌شود. 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 گواهی‌ها را تمدید و Apache را بروز می‌کند تا تنظیمات جدید اعمال شود. اما در صورت وجود خطا، Let’s Encrypt ایمیلی را به آدرسی که شما مشخص کردید ارسال میکند، تا از منقضی شدن گواهی مطلع شوید.

این مطلب اولین بار و بطور اختصاصی در ویوین منتشر شده است.