← شروع آموزش

WIUNIX ACADEMY

آموزش HAProxy و Let’s Encrypt با تمدید امن گواهی

صفحهٔ 4 از 4؛ مراحل قبلی و پیش‌نیازها را پیش از ادامه مرور کن.

آموزش متناسب با محیط تو

کجا اجرا می‌کنی؟

سیستم‌عامل و نسخه را انتخاب کن تا مراحل، دستورها و راه‌حل‌ها برای همان محیط نمایش داده شوند.

Debian 12بررسی‌شده با مستندات رسمی ·

آموزش متناسب با مقادیر تو

تنظیمات این آموزش

مقادیر نمونه را برای محیط خودت تنظیم کن؛ متن و دستورهای مرتبط با هم تغییر می‌کنند. رمز، کلید خصوصی و توکن وارد نکن. مقادیر فقط در همین زبانه نگهداری می‌شوند و به سرور یا لینک اشتراک‌گذاری فرستاده نمی‌شوند. پیش از اجرا، DNS، گواهی‌ها و سیاست شبکهٔ واقعی را بررسی کن.

آی‌پی، دامنه یا پورت مثال‌ها با محیط تو فرق دارد؟ دکمهٔ زیر را باز کن، مقادیر را تغییر بده و «اعمال در آموزش» را بزن؛ سپس دستورهای به‌روز‌شده را کپی کن.

تنظیم مقادیر برای محیط من7 مقدار قابل‌تغییر
22

قدم بعدی

زمان‌بندی را فعال و انقضای واقعی را پایش کنید

پس از probe دستی موفق، unitهای اختصاصی را فعال کنید. شکست timer، لاگ Certbot، fingerprint و انقضای گواهی واقعاً ارائه‌شده و readiness را از بیرون پایش کنید. active بودن timer شاهد صدور یا موفقیت hook نیست. از حساب و lineage، پیکربندی و PEM سالم در مقصد محافظت‌شدهٔ بیرون میزبان بک‌آپ بگیرید؛ در این مقاله reboot یا تمرین بازیابی بک‌آپ اجرا نشده است. خطای deploy hook لزوماً به معنی شکست صدور یا exit code ناموفق کل Certbot نیست؛ journal و گواهی ارائه‌شده را مستقل کنترل کنید.

bash

Bash روی VM اختصاصی؛ مورد بیرونی در متن مشخص است

set -euo pipefailo pipefail
sudo systemctl daemon-reload
sudo systemctl enable academy-haproxy.service academy-acme-webroot.service
sudo systemctl enable --now academy-certbot.timer
sudo systemctl list-timers --all academy-certbot.timer
sudo journalctl -u academy-certbot.service -n 60 --no-pager
openssl s_client -connect 'app.example.com:443' -servername 'app.example.com' -verify_hostname 'app.example.com' -verify_return_error -CApath /etc/ssl/certs </dev/null 2>/dev/null | openssl x509 -noout -dates -fingerprint -sha256
از کجا بدانم درست انجام شد؟

اجرای بعدی timer مشخص است؛ تاریخ و fingerprint گواهی عمومی دیده می‌شود و مسئول هشدار معلوم است.

23

قدم بعدی

مرز خرابی را بدون پنهان‌کردن خطا پیدا کنید

در خطای اعتبارسنجی، A/AAAA، بایت توکن، CAA و پورت ۸۰ بیرونی را پیش از تکرار بررسی کنید. ۴۰۴ معمولاً به مسیر یا وب‌روت و ۳۰۸ روی توکن به استثنای اشتباه مربوط است. در ۵۰۳، readiness و فایروال/مبدأ بک‌اند را ببینید؛ check را برای سالم جلوه‌دادن وابستگی خراب ضعیف نکنید. خطای TLS به زنجیره، SAN، کلید، مجوز یا SNI مربوط می‌شود؛ curl با k معیار پذیرش نیست. پس از شکست hook، گواهی lineage و گواهی ارائه‌شده را مقایسه و همان گواهی تمدیدشده را deploy کنید.

bash

Bash روی VM اختصاصی؛ مورد بیرونی در متن مشخص است

sudo haproxy -c -f '/srv/academy-haproxy-tls/haproxy.cfg'
sudo journalctl -u academy-haproxy.service -u academy-acme-webroot.service -u academy-certbot.service -n 100 --no-pager
sudo ss -lntp
sudo stat -c '%a %U:%G %n' '/srv/academy-haproxy-tls/certs' '/srv/academy-haproxy-tls/certs/app.example.com.pem'
curl --fail -H 'Host: app.example.com' 'http://10.77.0.21:8080/health/ready'
curl --fail -H 'Host: app.example.com' 'http://10.77.0.22:8080/health/ready'
dig CAA 'app.example.com'
از کجا بدانم درست انجام شد؟

لاگ و probe خرابی DNS/challenge، TLS/deploy و بک‌اند را جدا می‌کنند؛ خطاها قابل مشاهده می‌مانند.

24

قدم بعدی

PEM معتبر قبلی را آگاهانه بازگردانید

هنگام بررسی فقط timer همین تمرین را متوقف کنید. PEM قبلی باید هنوز برای دامنه معتبر، منقضی‌نشده و ابطال‌نشده باشد؛ کلید خصوصی دارد و ۰۶۰۰ می‌ماند. ابتدا کاندیدا را با پیکربندی فعال اعتبارسنجی و بعد تعویض و reload کنید. فایل خراب را خصوصی نگه دارید. این مرحله برای شروع فقط HTTP یا تعویض بی‌دلیل گواهی سالم نیست.

bash

Bash روی VM اختصاصی؛ مورد بیرونی در متن مشخص است

set -eu
sudo systemctl stop academy-certbot.timer
sudo openssl x509 -in '/srv/academy-haproxy-tls/certs/app.example.com.previous.pem' -checkend 86400 -checkhost 'app.example.com' -noout
sudo install -m 0600 '/srv/academy-haproxy-tls/certs/app.example.com.previous.pem' '/srv/academy-haproxy-tls/certs/rollback.pem'
sudo python3 - <<'PY'
from pathlib import Path
root=Path('/srv/academy-haproxy-tls')
s=(root/'haproxy.cfg').read_text()
old=str(root/'certs/app.example.com.pem')
assert s.count('crt '+old)==1
(root/'rollback.cfg').write_text(s.replace('crt '+old,'crt '+str(root/'certs/rollback.pem')))
PY
sudo haproxy -c -f '/srv/academy-haproxy-tls/rollback.cfg'
sudo mv '/srv/academy-haproxy-tls/certs/rollback.pem' '/srv/academy-haproxy-tls/certs/app.example.com.pem'
sudo haproxy -c -f '/srv/academy-haproxy-tls/haproxy.cfg'
sudo systemctl reload academy-haproxy.service
curl --fail --show-error 'https://app.example.com/'
از کجا بدانم درست انجام شد؟

PEM قبلی معتبر بررسی و پس از reload ارائه می‌شود؛ timer تا رفع علت متوقف می‌ماند.

25

قدم بعدی

شکست اولین فعال‌سازی TLS را بازیابی کنید

فقط اگر اولین reload مربوط به TLS شکست خورد، bootstrap ذخیره‌شده را برگردانید. در این حالت HTTPS عمداً حذف می‌شود و فقط HTTP-01 برای تعمیر می‌ماند؛ اپلیکیشن امن ارائه نمی‌شود. پس از رفع علت، کاندیدا، TLS و hook را دوباره بسنجید و timer اختصاصی را از سر بگیرید. برای پایان آزمایش، فقط unitهای هم‌نام را متوقف و غیرفعال و فایل‌های خصوصی را آرشیو کنید؛ پیکربندی توزیع یا DNS دیگران را پاک نکنید.

bash

Bash روی VM اختصاصی؛ مورد بیرونی در متن مشخص است

set -eu
sudo haproxy -c -f '/srv/academy-haproxy-tls/haproxy.bootstrap.cfg'
sudo install -m 0644 '/srv/academy-haproxy-tls/haproxy.bootstrap.cfg' '/srv/academy-haproxy-tls/haproxy.cfg.next'
sudo mv '/srv/academy-haproxy-tls/haproxy.cfg.next' '/srv/academy-haproxy-tls/haproxy.cfg'
sudo systemctl reload academy-haproxy.service
curl --fail --resolve 'app.example.com:80:192.0.2.10' 'http://app.example.com/.well-known/acme-challenge/academy-probe'
از کجا بدانم درست انجام شد؟

bootstrap فعال شده و probe همچنان متن دقیق توکن عمومی را برمی‌گرداند.

دامنهٔ واقعی آزمون این مقاله

مسیر همهٔ سیستم‌عامل‌ها با مستندات بررسی شده و نصب کامل آن‌ها ادعا نمی‌شود. نتیجهٔ fixture ایزوله پس از اجرای واقعی در شاهد ثبت می‌شود. صدور عمومی ACME، ساخت حساب، تغییر DNS، تمدید واقعی CA، بوت systemd، HA و بازیابی بک‌آپ انجام‌شده محسوب نمی‌شوند. شخصی‌سازی فرم فقط متن و پنل کپی را تغییر می‌دهد و شبکهٔ شما را آزمایش نمی‌کند.

پس از اثبات این لبه، افزونگی را طراحی کنید

معنای readiness، هشدار تمدید و بک‌آپ کلید باید مسئول مشخص داشته باشد. در معماری چندلبه، توزیع challenge، نگهداری گواهی، state و failover جدا طراحی می‌شوند؛ تکثیر این VM به‌تنهایی HA نمی‌سازد. سپس راهنمای HAProxy و Keepalived را با توجه به مرز شبکه و split-brain دنبال کنید.

پشتوانهٔ این آموزش

منابع رسمی

وضعیت بررسی هر محیط بالای صفحه مشخص است؛ بررسی مستندات به معنی اجرای عملی همهٔ نسخه‌ها نیست.

ادامهٔ مسیر

قدم بعدی تو

همهٔ آموزش‌های آکادمی ↗