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 .