آپاچی؛ شب ۱۳: گواهی عمومی، ACME و تمدید قابل آزمون
فهرست نوشته
گواهی آزمایشگاهی برای دامنهٔ عمومی کافی نیست. امشب روند صدور و تمدید گواهی عمومی را طراحی میکنیم و فقط روی یک دامنه و سرور عمومیِ متعلق به خودمان اجرا میکنیم.
این جلسه بخشی از دورهٔ آپاچی در ۵۰ شب است. قرارداد نامها، مسیرها و روش اعمال تغییر را در راهنمای دوره بخوان.
محیط: تمرین مستقل؛ 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 .