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

این جلسه بخشی از دورهٔ آپاچی در ۵۰ شب است. قرارداد نام‌ها، مسیرها و روش اعمال تغییر را در راهنمای دوره بخوان.

محیط: تمرین مستقل؛ Ubuntu 24.04، دامنهٔ واقعی با DNS معتبر، دسترسی ورودی لازم و backup. روی .test این تمرین اجرا نمی‌شود.

اثبات مالکیت دامنه#

ACME پروتکل خودکار صدور گواهی است. در روش HTTP-01، مرجع صدور فایلی زیر /.well-known/acme-challenge/ را روی پورت 80 می‌خواند. DNS-01 مالکیت را با رکورد DNS می‌سنجد و برای wildcard لازم است؛ credential DNS باید کم‌اختیار باشد.

نمونهٔ زیر public.example.org را placeholder دارد؛ پیش از اجرا نام دامنهٔ متعلق به خودت و webroot واقعی را جایگزین کن:

sudo apt install certbot
sudo certbot certonly --webroot -w /var/www/apache-lab/public \
  -d public.example.org
sudo certbot certificates
sudo certbot renew --dry-run

این روش config Apache را خودکار بازنویسی نمی‌کند. در میزبان TLS دامنهٔ واقعی، مسیرهای fullchain.pem و privkey.pem معرفی‌شده توسط Certbot را قرار بده. fullchain شامل گواهی سرور و intermediateهای لازم است؛ کلید خصوصی فقط برای root قابل خواندن بماند.

در شاخهٔ Alma/Rocky، ابتدا روش نصب پشتیبانی‌شدهٔ Certbot برای همان release و repository را از منبع رسمی انتخاب کن؛ نام بسته و روش نصب Ubuntu را عیناً منتقل نکن.

تمدید بدون قطعی پنهان#

deploy hook فقط پس از تمدید موفق اجرا می‌شود. روی این VM Ubuntu فایل اجرایی root-owned در /etc/letsencrypt/renewal-hooks/deploy/reload-apache بساز:

#!/bin/sh
set -eu
/usr/sbin/apache2ctl -t
/usr/bin/systemctl reload apache2

حالت فایل 750 و مالک root باشد. وجود timer را با systemctl list-timers بررسی کن؛ یک cron تکراری نساز. برای آزمون hook، رفتار --run-deploy-hooks را در راهنمای نسخهٔ نصب‌شده ببین و reload واقعی را در maintenance window انجام بده.

آزمون و بازگشت: تاریخ گواهی ارائه‌شده در شبکه را با فایل روی دیسک مقایسه کن؛ صرف موفقیت renew کافی نیست. نسخهٔ قبلی config را نگه دار، challenge path را از proxy و احراز هویت عمومی مستثنا کن و از جایگزینی رازهای DNS در گزارش خودداری کن.

منبع: روش‌های challenge در Let’s Encrypt ، تمدید و hookهای Certbot .