مرورگرها و موتورهای جستجو انتظار HTTPS دارند و Let's Encrypt گواهی را رایگان میدهد. روی VPS Linux Infrawire با AlmaLinux 9، Certbot میتواند گواهی را بگیرد، پیکربندی Apache را ویرایش کند و خودش آن را تمدید کند. همین مراحل برای Rocky Linux 9 هم صادق است.
📋 پیشنیازها
- یک VPS با AlmaLinux 9 و دسترسی root یا sudo (آیپی و گذرواژه در بخش کاربری مشتری).
- یک دامنه،
example.com، که رکورد A آن (و AAAA برای IPv6) بهVPS_IPاشاره کند. ابتدا منتظر انتشار DNS بمانید. - Apache (httpd) که سایت را روی HTTP و درگاه 80 ارائه میدهد.
1. نصب Apache و باز کردن فایروال
اگر Apache هنوز نصب نیست، آن را نصب و راهاندازی کنید. سپس HTTP و HTTPS را در firewalld باز کنید؛ درگاه 80 برای اعتبارسنجی Let's Encrypt لازم است.
Bashdnf install -y httpd systemctl enable --now httpd firewall-cmd --permanent --add-service=http firewall-cmd --permanent --add-service=https firewall-cmd --reload firewall-cmd --list-services
2. ساخت میزبان مجازی برای دامنه
Certbot دنبال یک ServerName مطابق دامنهٔ شما میگردد، پس یک میزبان مجازی اختصاصی بسازید.
Bashmkdir -p /var/www/example.com/public_html echo "Hello" > /var/www/example.com/public_html/index.html
فایل /etc/httpd/conf.d/example.com.conf را بسازید:
Apache1<VirtualHost *:80> 2 ServerName example.com 3 ServerAlias www.example.com 4 DocumentRoot /var/www/example.com/public_html 5</VirtualHost>
نحو را بررسی کنید و دوباره بارگذاری کنید:
Bashapachectl configtest systemctl reload httpd
3. نصب Certbot و mod_ssl
Certbot از مخزن EPEL میآید. mod_ssl ماژول TLS آپاچی و گواهی پیشفرضی را فراهم میکند که httpd برای گوش دادن روی درگاه 443 به آن نیاز دارد.
Bashdnf install -y epel-release dnf install -y certbot python3-certbot-apache mod_ssl
4. درخواست گواهی
Certbot را با افزونهٔ Apache اجرا کنید. دامنه را از طریق HTTP اعتبارسنجی میکند، یک میزبان مجازی جدید به نام *-le-ssl.conf مینویسد و میتواند تغییر مسیر HTTP به HTTPS را اضافه کند.
Bashcertbot --apache -d example.com -d www.example.com
یک ایمیل واقعی وارد کنید (برای هشدار انقضا)، شرایط را بپذیرید و هنگام پرسش گزینهٔ تغییر مسیر را انتخاب کنید. هر نامی که با -d میدهید باید به این سرور اشاره کند، وگرنه اعتبارسنجی شکست میخورد.
اگر SELinux در حالت enforcing است (پیشفرض)، برای نصب معمول کار خاصی لازم نیست. برای دور زدن یک خطا آن را غیرفعال نکنید.
5. بررسی تمدید خودکار
گواهیهای Let's Encrypt ۹۰ روز اعتبار دارند. روی AlmaLinux 9 بسته یک تایمر systemd نصب میکند که روزی دو بار اجرا میشود و فقط گواهیهای نزدیک به انقضا را تمدید میکند.
Bashsystemctl list-timers | grep certbot systemctl status certbot-renew.timer
اگر تایمر در فهرست نبود، آن را فعال کنید:
Bashsystemctl enable --now certbot-renew.timer
تمدید را بدون دست زدن به گواهی واقعی شبیهسازی کنید:
Bashcertbot renew --dry-run
خط آخر باید بگوید همهٔ تمدیدهای شبیهسازیشده موفق بودهاند. پس از تمدید واقعی، Apache خودکار بارگذاری مجدد میشود.
بررسی
Bashcertbot certificates curl -I https://example.com curl -I http://example.com
دستور اول دامنهها و تاریخ انقضا را فهرست میکند. درخواست HTTPS باید 200 بدهد و درخواست HTTP باید با 301 به نشانی HTTPS هدایت کند. در مرورگر، قفل باید گواهی معتبر صادرشده توسط Let's Encrypt را نشان دهد. برای دیدن کل زنجیره میتوانید openssl s_client -connect example.com:443 -servername example.com را اجرا کنید.
عیبیابی
- شکست challenge یا اتمام زمان هنگام اعتبارسنجی: DNS هنوز به سرور اشاره نمیکند یا درگاه 80 بسته است.
dig +short example.com،firewall-cmd --list-servicesو هر فایروالِ جلوی VPS را بررسی کنید. - Certbot میزبان مجازی مطابق پیدا نمیکند:
ServerNameیاServerAliasدر/etc/httpd/conf.d/با دامنهٔ واردشده یکی نیست. اصلاح کنید،apachectl configtestرا اجرا کنید و دوباره تلاش کنید. میتوانید ازcertbot certonly --apacheهم استفاده کنید و مسیرها را خودتان تنظیم کنید. - گواهی یا اعتبارسنجی ناموفق بیش از حد (محدودیت نرخ): Let's Encrypt تلاشهای تکراری را محدود میکند. ابتدا با
certbot --apache --dry-runآزمایش کنید و پیش از تلاش دوباره صبر کنید. - سایت پس از نصب روی 443 در دسترس نیست: HTTPS در firewalld باز نیست یا httpd دوباره بارگذاری نشده است.
firewall-cmd --permanent --add-service=https،firewall-cmd --reloadوsystemctl restart httpdرا اجرا کنید.
🔐 سایت Apache شما روی AlmaLinux 9 اکنون HTTPS ارائه میدهد و گواهی خود را خودکار تمدید میکند.