گواهینامه های TLS و تمدید خودکار
چرا به آن نیاز دارید ؟
TLS ترافیک «kliyent↔servis» را رمزگذاری می کند، صحت سرور (و با mTLS - مشتری) را تأیید می کند، و همچنین در برابر کلاهبرداری محافظت می کند. خطرات اصلی: تاخیر گواهی، کلید ضعیف، زنجیره اعتماد نادرست، روش های دستی. هدف این مقاله توصیف معماری است که در آن گواهینامه ها همیشه مرتبط هستند و چرخش ها توسط کاربران نادیده گرفته می شوند.
مفاهیم پایه
CA/امضا کننده: مجوز صدور گواهینامه (عمومی یا داخلی).
زنجیره ای (fullchain): گواهی برگ + متوسط + ریشه (معمولا در مخازن مشتری ریشه).
SAN (نام جایگزین موضوع): لیست دامنه/IP برای یک گواهی (چند SAN).
wildcard: ".example. com - مناسب برای بسیاری از زیر دامنه ها، نیاز به اعتبار DNS دارد.
OCSP stapling: سرور آخرین وضعیت لغو را اعمال می کند ؛ کاهش تاخیر و وابستگی به OCSP های خارجی.
HPKP: منسوخ/استفاده نمی شود ؛ در عوض، CT سیاهههای مربوط و بهداشت کلیدی.
CT (Certificate Transparency): سیاهههای مربوط به صدور عمومی - برای کنترل انتشارات جعلی مهم است.
مشخصات رمزنگاری و کلید
الگوریتم ها:- ECDSA (P-256) - سریع و جمع و جور ؛ ترجیح برای مشتریان مدرن
- RSA-2048/3072 - هنوز هم سازگار است می تواند دوگانه CERT (RSA + ECDSA) برگزار شود.
- تولید کلید: فقط در طرف هدف (دزدان دریایی خصوصی را از طریق شبکه منتقل نکنید)، از حقوق دسترسی («0600») محافظت کنید.
- HSM/KMS: برای مناطق بحرانی (پرداخت/PII) کلیدهای فروشگاه در HSM/KMS، عملیات حسابرسی را فعال کنید.
- طول عمر: گواهینامه های کوتاه (90 روز/30 روز برای داخلی) چرخش مکرر را تشویق می کنند و خطر سازش را کاهش می دهند.
مدل های معماری مدیریت TLS
1. CA عمومی از طریق ACME (بیایید رمزگذاری/Buypass/و غیره)
اعتبار سنجی: HTTP-01 (از طریق وب سرور/Ingress) یا DNS-01 (برای دامنه های wildcard/out-of-stream).
مزایا: اعتماد آزاد/خودکار، گسترده. معایب: وابستگی های خارجی
2. CA داخلی شرکت
ابزار: HashiCorp Vault PKI، Smallstep (step-ca)، Microsoft AD CS، CFSSL.
مزایا: سیاست های سفارشی، mTLS، TTL کوتاه، انتشار برای دامنه های داخلی. معایب: توزیع ریشه، مدیریت اعتماد.
3. هیبرید
CA عمومی برای کاربران خارجی ؛ CA داخلی - برای سرویس به سرویس (mTLS)، کانال های بین خوشه ای و مدیران.
الگوهای تجدید خودکار (تجدید)
اصول کلی
آستانه تجدید: شروع در «≤ 30» روز قبل از انقضای; برای خدمات بحرانی - در روزهای ≤ 45.
Zero-downtime: صدور گواهی جدید، جایگزینی اتمی، بارگذاری صاف بدون شکستن اتصالات.
دو نگه دارید (آبی/سبز): ذخیره cert فعلی و بعدی ؛ تعویض - از طریق symlink یا نسخه مخفی.
هشدار: 45/30/14/7/3/1 روز هشدار ؛ هشدار جداگانه در طول شکست چالش ACME.
مشتریان ACME و کاربرد آنها
certbot/acme. sh/lego: عوامل نور در VM/bare-metal.
cert-manager (Kubernetes): اپراتور با Issuer/ClusterIssuer کار می کند ؛ خودکار انتشار/تجدید و نوشتن به راز.
step-ca/Vault Agent: انتشار/چرخش خودکار با TTL های کوتاه، الگوهای جانبی جانبی برای به روز رسانی کلید ها و زنجیره ها.
فرآیندهایی برای کوبرنتیز
cert-manager (مثال صادرکننده برای Let's Encrypt HTTP-01 via Ingress):yaml apiVersion: cert-manager. io/v1 kind: ClusterIssuer metadata:
name: le-http01 spec:
acme:
email: devops@example. com server: https://acme-v02. api. letsencrypt. org/directory privateKeySecretRef:
name: le-account-key solvers:
- http01:
ingress:
class: nginx
درخواست گواهینامه:
yaml apiVersion: cert-manager. io/v1 kind: Certificate metadata:
name: app-cert namespace: prod spec:
secretName: app-tls dnsNames:
- app. example. com issuerRef:
name: le-http01 kind: ClusterIssuer privateKey:
algorithm: ECDSA size: 256 renewBefore: 720h # 30 дней
مبادله داغ در NGINX-Ingress به طور خودکار زمانی رخ می دهد که «Secret» به روز می شود. «منحنی ssl-ecdh: secp256r1» را اضافه کنید و ocsp را از طریق حاشیه نویسی ConfigMap فعال کنید.
فرآیندهای VM/Bare-metal
گواهینامه (HTTP-01):bash sudo certbot certonly --webroot -w /var/www/html -d example. com -d www.example. com \
--deploy-hook "systemctl reload nginx"
«certbot renew» دوره ای از طریق تایمر systemd.
برای wildcard، از DNS-01 (ارائه دهنده افزونه) و مشابه «- deploy-hook» استفاده کنید.
bash export CF_Token="" # example for Cloudflare acme. sh --issue --dns dns_cf -d example. com -d '.example. com' \
--keylength ec-256 --ecc \
--reloadcmd "systemctl reload nginx"
جایگزینی اتمی NGINX
زنجیره ای نگه دارید. PEM 'и' کلید خصوصی. pem 'زیر مسیرهای پایدار (symlink به فایل های نسخه شده)، سپس' nginx -s reload '.
PKI داخلی و mTLS
HashiCorp Vault PKI (نقش نمونه):bash vault secrets enable pki vault secrets tune -max-lease-ttl=87600h pki vault write pki/root/generate/internal common_name="Corp Root CA" ttl=87600h vault write pki/roles/service \
allowed_domains="svc. cluster. local,internal. example" allow_subdomains=true \
max_ttl="720h" require_cn=false key_type="ec" key_bits=256
انتشار خودکار: از طریق Vault Agent Injector (K8s) یا sidecar ؛ برنامه دوباره cert را از فایل/FS-watcher می خواند.
TTL کوتاه: 24-720 ساعت، که چرخش مکرر را تشویق می کند و ارزش کلید سرقت شده را کاهش می دهد.
mTLS: صدور گواهینامه مشتری برای خدمات/نقش های خاص ؛ در ورودی - TLS متقابل در ورود/sidecar-proxy.
عملیات ایمن
به اشتراک گذاری اسرار: کلید خصوصی - فقط در میزبان/غلاف، دسترسی با توجه به اصل حداقل امتیازات.
حقوق فایل: '600' برای کلید ؛ مالک - پردازش کاربر.
دوره گریس: تنظیم «renewBefore» به اندازه کافی برای حساب DNS/ACME/ارائه دهنده شکست.
OCSP Stapling: روشن کردن در جبهه ؛ نظارت بر طراوت پاسخ (معمولا 12-72 ساعت).
HSTS: به تدریج (بدون «پیش بارگذاری» در ابتدا) روشن می شود، اطمینان حاصل کنید که تحویل درست HTTPS تمام محتوا.
Dual-cert (RSA + ECDSA): سازگاری و عملکرد را بهبود می بخشد ؛ ECDSA را به مشتریان مدرن بدهید.
- روز قبل از انقضا (سنج) برای هر دامنه/راز ؛ SLO: «هیچ cert از <7 روز به انقضای».
- اعتبار زنجیره ای (اتصال)، انطباق SAN با دامنه های مورد نیاز/IP.
- وضعیت منگنه OCSP (طراوت پاسخ).
- درصد چالش های موفقیت آمیز/ناموفق ACME.
- Leitency TLS handshakes, نسخه پروتکل/رمز (ممیزی).
- اخطار: 30 روز تا انقضا.
- Crit: 7 روز/شکست 'تجدید'.
- صفحه: 72 ساعت/زنجیره نامعتبر در برچسب زدن/بدون OCSP.
حوادث و عقب نشینی
تاخیر گواهی: به طور موقت صدور مجدد و استقرار دستی، رفع RCA (چرا تجدید کار نمی کند، DNS مسدود کردن/محدودیت API).
سازش کلیدی: صدور مجدد فوری/ابطال، چرخش اسرار، حسابرسی دسترسی، چرخش ارائه دهنده DNS/ACME توکن حساب.
زنجیره نادرست: سپرده فوری «زنجیره کامل» صحیح، بارگیری مجدد جبهه ها.
قفل به ارائه دهنده DNS: مسیر اعتبار پشتیبان (HTTP-01) یا DNS ثانویه را نگه دارید.
چک لیست اجرای خودکار تجدید
1. مدل را انتخاب کنید (CA عمومی از طریق ACME/PKI داخلی/ترکیبی).
2. مشخصات رمزنگاری را تعریف کنید: ECDSA-P256، در صورت لزوم دوگانه با RSA-2048.
3. پیکربندی عامل خودکار (cert-manager, certbot, acme. SH، طاق عامل).
4. سازماندهی جایگزینی صفر خرابی (الگوی symlink، ورود مجدد داغ/NGINX/Envoy).
5. OCSP Stapling و HSTS (در مرحله) را روشن کنید.
6. اضافه کردن تاریخ هشدار و وضعیت چالش ؛ SLO را تجویز کنید.
7. مستند سازی فرآیندهای شکستن شیشه و دستی.
8. انجام تمرینات «جعلی»: DNS-01 شکسته، سقوط ACME، ریشه/متوسط منقضی شده است.
9. دسترسی به کلیدهای خصوصی را مرور کنید، نشانه های ارائه دهنده DNS و حساب های ACME را بچرخانید.
ویژگی های برای iGaming/fintech
PCI DSS/PII: Cipher Suites سخت، TLS اجباری 1. 2+/1. 3، خاموش کردن رمزهای ضعیف/فشرده سازی، از سرگیری جلسه بدون مصالحه امنیتی.
تقسیم بندی دامنه: گواهینامه های جداگانه برای زیر دامنه ها و مدیران پرداخت ؛ برای ارائه دهندگان محتوا - زنجیره های جدا شده.
ممیزی و ورود به سیستم: انتشار رکورد/فراخوان/چرخش ؛ امضای مصنوعات CI/CD.
چند منطقه ای: صادرکنندگان محلی به مناطق، به طوری که به شکست های بین منطقه ای وابسته نباشند.
تنظیمات نمونه
NGINX (RSA + ECDSA، مهر و موم OCSP)
nginx ssl_protocols TLSv1. 2 TLSv1. 3;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_ecdh_curve secp256r1;
ssl_certificate /etc/nginx/certs/app_ecdsa/fullchain. pem;
ssl_certificate_key /etc/nginx/certs/app_ecdsa/privkey. pem;
ssl_certificate /etc/nginx/certs/app_rsa/fullchain. pem;
ssl_certificate_key /etc/nginx/certs/app_rsa/privkey. pem;
ssl_stapling on;
ssl_stapling_verify on;
add_header Strict-Transport-Security "max-age=31536000" always;
OpenSSL: CSR (ECDSA-P256)
bash openssl ecparam -name prime256v1 -genkey -noout -out privkey. pem openssl req -new -key privkey. pem -out csr. pem -subj "/CN=app. example. com" \
-addext "subjectAltName=DNS:app. example. com,DNS:www.example. com"
CFSSL: مشخصات و صدور
json
{
"signing": {
"profiles": {
"server": {
"usages": ["digital signature","key encipherment","server auth"],
"expiry": "2160h"
}
}
}
}
bash cfssl gencert -profile=server ca. json csr. json cfssljson -bare server
سوالات متداول
آیا من به یک wildcard نیاز دارم ؟
اگر زیر دامنه های جدید اغلب ظاهر می شوند، بله (از طریق DNS-01). در غیر این صورت، از multi-SAN برای دامنه های صریح استفاده کنید.
چه چیزی را انتخاب کنید: cert-manager یا certbot ؟
Kubernetes → cert-manager. VM/میکروسرویس از K8s → certbot/lego/acme. هیس. PKI داخلی → Vault/step-ca.
آیا میتوان TTL را به یک روز کاهش داد ؟
برای mTLS داخلی، بله، اگر اتوماسیون/sidecar تضمین چرخش و برنامه های کاربردی می تواند داغ مجدد.
چگونه DNS-01 را ایمن کنیم ؟
توکن جداگانه/دسترسی حداقل به منطقه، چرخش کلید، محدود کردن دسترسی IP API، ممیزی.
مجموع
مدیریت قابل اطمینان TLS ترکیبی از پروفایل صحیح رمزنگاری، انتشار و تجدید خودکار، چرخش زمان از کار افتادگی صفر، قابلیت مشاهده و روشهای روشن واکنش به حادثه است. ساخت یک خط لوله ACME/PXI، اضافه کردن هشدار دقیق و به طور منظم آموزش سناریوهای «اضطراری» - و گواهینامه های منقضی شده دیگر منبع پیجر های شبانه نخواهند بود.