نحوه دریافت 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