انجیناکس؛ شب ۱۳: گواهی عمومی، ACME و تمدید
فهرست نوشته
CA محلی برای دامنهٔ عمومی اعتماد ایجاد نمیکند. امشب صدور و تمدید را روی دامنهای متعلق به خودمان طراحی میکنیم؛ این شاخه روی .test اجرا نمیشود.
این جلسه بخشی از دورهٔ انجیناکس در ۵۰ شب است. قرارداد آزمایشگاه، مسیرها و روال اعمال تغییر در راهنمای دوره آمده است.
محیط: تمرین مستقل Ubuntu 24.04، دامنهٔ واقعی، DNS درست، پورت لازم و backup. placeholder دامنه را پیش از اجرا جایگزین کن.
challenge با webroot#
ACME صدور گواهی را خودکار میکند. HTTP-01 فایل روی پورت 80 و DNS-01 رکورد DNS را بررسی میکند؛ برای wildcard روش DNS لازم است. در server HTTP دامنهٔ واقعی:
location ^~ /.well-known/acme-challenge/ {
root /var/www/nginx-lab/public;
try_files $uri =404;
}
location / {
return 301 https://public.example.org$request_uri;
}
نام public.example.org نمونه است و باید به دامنهٔ خودت تبدیل شود. return سطح server نگذار؛ میتواند پیش از location مربوط به challenge اجرا شود.
sudo apt install certbot
sudo certbot certonly --webroot -w /var/www/nginx-lab/public \
-d public.example.org
sudo certbot certificates
sudo certbot renew --dry-run
مسیر fullchain.pem و privkey.pem گزارششده را در server TLS همان دامنه قرار بده. fullchain گواهی سرویس و intermediateهای لازم را دارد. در Alma/Rocky روش نصب Certbot را از مستند رسمی همان محیط انتخاب کن؛ layout Ubuntu را فرض نکن.
reload پس از تمدید#
در /etc/letsencrypt/renewal-hooks/deploy/reload-nginx یک فایل root-owned با حالت 750 بساز:
#!/bin/sh
set -eu
/usr/sbin/nginx -t
/usr/bin/systemctl reload nginx
deploy hook بعد از تمدید موفق اجرا میشود. timer موجود را با systemctl list-timers بررسی کن؛ cron تکراری نساز. روش آزمون deploy hook را با راهنمای نسخهٔ Certbot تطبیق بده.
آزمون و بازگشت: تاریخ گواهی ارائهشده روی شبکه را با فایل تازه مقایسه کن؛ renew موفق بدون reload کافی نیست. config پیشین و challenge path سالم را نگه دار؛ token DNS باید کماختیار و خصوصی باشد.
منبع: challengeهای Let’s Encrypt ، تمدید Certbot .