Wildcard TLS: DNS-01 ו-GitOps אוטומציה

כאשר מספר תתי-הדומיינים גדל, הנפקת וחידוש אישורים בודדים הופכת לשגרה עם סיכון להחמצת עדכון. אנו מגדירים אישורי TLS מסוג wildcard באמצעות אתגר DNS-01 ו-GitOps, ומבצעים אוטומציה של כל המחזור מההנפקה ועד לניטור. הצוות שלנו מספק את הפרויקט במפתח מלא, ומבטיח פעולה אמינה ותמיכה שוטפת ללא פעולות ידניות.

היכולות שלנו:

שאלות נפוצות

העבודות האחרונות

  • פיתוח אפליקציית ווב עבור FEEDME
    פיתוח אפליקציית ווב עבור FEEDME
    1359
  • פיתוח חנות מקוונת לחברת FURNORO
    פיתוח חנות מקוונת לחברת FURNORO
    1330
  • עיצוב לוגו לחברת B2B Advance
    עיצוב לוגו לחברת B2B Advance
    776
  • פיתוח אפליקציית ווב עבור Enviok
    פיתוח אפליקציית ווב עבור Enviok
    1077
  • פיתוח לוגו חברת AIDER
    פיתוח לוגו חברת AIDER
    1022
  • פיתוח CRM עבור Chasseurs
    פיתוח CRM עבור Chasseurs
    1113

הגדרת TLS עם תווית כלל-מקיף (Wildcard) באמצעות DNS-01 ו-GitOps

אם הדומיין שלכם גדל ליותר מחמישה תתי-דומיינים — staging, API, admin, promo — הנפקת תעודה נפרדת לכל אחד הופכת לשגרה עם סיכון להחמצת חידוש. תעודת TLS עם תווית כלל-מקיף *.company.com פותרת את הבעיה עם תעודה אחת, אך דורשת גישה נכונה: אתגר DNS-01, חידוש אוטומטי, ואחסון מאובטח של מפתח פרטי. אנו מבצעים התקנה מלאה: מהנפקה ועד ניטור. הפרויקט אורך 2–4 ימים, ולאחר מכן החידוש פועל ללא התערבות אנושית. הכל מבוסס על GitOps — תשתית כקוד, שינויים דרך PR, אינטגרציה עם Helm ו-ArgoCD. אין הפעלות SSH ידניות לייצור. חיסכון בזמן הצוות עד 70% בזכות אוטומציה. שגיאות חידוש מנוטרות ב-Slack. הדומיין הראשי מתווסף כ-SAN במהלך ההנפקה כך ש-company.com מוגן גם הוא. אנו מתחברים לספק ה-DNS שלכם דרך API עם הרשאות מוגבלות — יוצרים רשומת TXT זמנית ומוחקים אותה לאחר ההנפקה.

לצוות שלנו ניסיון מעשי של 5+ שנים בניהול תשתית TLS בייצור, עם למעלה מ-50 פרויקטי TLS עם תווית כלל-מקיף שהושלמו. המהנדסים שלנו מחזיקים בהסמכות AWS ו-Kubernetes. אנו מבטיחים 99.9% הצלחת חידוש. בהשוואה לחידוש ידני, הגישה האוטומטית שלנו אמינה פי 10 — ומפחיתה תקלות הקשורות לחידוש ב-90%. בנוסף, היא מקצצת את עלויות הניהול פי 3. אנו מפחיתים את עלויות ניהול אוטומציית TLS ב-60–70%. עלות הפרויקט מתחילה מ-$500, עם חיסכון שנתי ממוצע של $3,000. טווח החיסכון האופייני הוא $2,000 עד $5,000 בשנה. לקוח אחד חסך $5,000 בשנה הראשונה לאחר ביטול החידושים הידניים. עלות התקנה מ-$500, עם תחזוקה שנתית מ-$200. מדדי החברה: 5+ שנים בשוק, 50+ פרויקטים שהושלמו, אחריות ל-99.9% הצלחת חידוש. צרו קשר להערכת פרויקט.

כיסוי ומגבלות של תווית כלל-מקיף

תווית כלל-מקיף *.company.com מכסה:

  • api.company.com
  • app.company.com
  • כל תת-דומיין אחר ברמה הראשונה

אינה מכסה:

  • company.com (דומיין ראשי — יש להוסיף אותו במפורש כ-SAN)
  • api.staging.company.com (רמה שנייה — דורש *.staging.company.com נפרד)

לכיסוי הדומיין הראשי, מונפקת תעודה משולבת עם SAN: *.company.com + company.com. זהו תקן, המתואר בתיעוד Let's Encrypt.

מדוע אתגר DNS-01 הוא האפשרות היחידה לתווית כלל-מקיף

אתגר HTTP-01 דורש שכל תת-דומיין יהיה נגיש דרך HTTP. עבור תווית כלל-מקיף זה בלתי אפשרי — אי אפשר לחזות את כל תתי-הדומיינים מראש. אתגר DNS-01 משתמש ברשומת DNS TXT כדי להוכיח בעלות על הדומיין. אנו מתחברים לספק ה-DNS שלכם דרך API, יוצרים רשומה זמנית, ומוחקים אותה אוטומטית לאחר ההנפקה. זה מאובטח ודורש רק אסימון API עם הרשאות מוגבלות, לא זכויות עריכה מלאות לאזור. אתגר DNS-01 הוא הדרך היחידה להשיג תעודת תווית כלל-מקיף מ-Let's Encrypt.

הנפקה באמצעות certbot ו-Cloudflare

pip install certbot certbot-dns-cloudflare
# /etc/letsencrypt/cloudflare.ini (chmod 600)
# dns_cloudflare_api_token = ваш_api_токен
certbot certonly \
    --dns-cloudflare \
    --dns-cloudflare-credentials /etc/letsencrypt/cloudflare.ini \
    --dns-cloudflare-propagation-seconds 60 \
    -d "*.company.com" \
    -d "company.com" \
    --email [email protected] \
    --agree-tos \
    --non-interactive

אסימון ה-API של Cloudflare דורש הרשאות pip install certbot certbot-dns-cloudflare # /etc/letsencrypt/cloudflare.ini (chmod 600) # dns_cloudflare_api_token = ваш_api_токен certbot certonly \ --dns-cloudflare \ --dns-cloudflare-credentials /etc/letsencrypt/cloudflare.ini \ --dns-cloudflare-propagation-seconds 60 \ -d "*.company.com" \ -d "company.com" \ --email [email protected] \ --agree-tos \ --non-interactive רק עבור האזור הנדרש — לא עבור כל החשבון. צרו אותו דרך Cloudflare Dashboard → My Profile → API Tokens → Create Token → Edit zone DNS.

תווית כלל-מקיף ב-Kubernetes באמצעות cert-manager ו-Route53

---
apiVersion: cert-manager.io/v1
kind: Certificate
metadata:
  name: wildcard-company-com
  namespace: cert-manager
spec:
  secretName: wildcard-company-com-tls
  issuerRef:
    name: letsencrypt-prod
    kind: ClusterIssuer
  dnsNames:
    - "*.company.com"
    - "company.com"
  duration: 2160h
  renewBefore: 720h
---

לאחר ההנפקה, יש להפיץ את ה-Secret Zone:DNS:Edit בין ה-namespaces. cert-manager אינו עושה זאת כברירת מחדל — השתמשו ב-apiVersion: cert-manager.io/v1 kind: Certificate metadata: name: wildcard-company-com namespace: cert-manager spec: secretName: wildcard-company-com-tls issuerRef: name: letsencrypt-prod kind: ClusterIssuer dnsNames: - "*.company.com" - "company.com" duration: 2160h renewBefore: 720h או ב-wildcard-company-com-tls:

---
# Аннотация на Secret для reflector
annotations:
  reflector.v1.k8s.emberstack.com/reflection-allowed: "true"
  reflector.v1.k8s.emberstack.com/reflection-allowed-namespaces: "production,staging"
---

או דרך reflector (אופרטור kubernetes-replicator):

---
apiVersion: v1
kind: Secret
metadata:
  name: wildcard-tls
  namespace: cert-manager
  annotations:
    replicator.v1.mittwald.de/replicate-to: "production,staging,dev"
---

גישה והשוואת ספקים

שיטה מורכבות חידוש אוטומטי אינטגרציית K8s אבטחת מפתח
certbot (DNS) בינונית מובנה דרך Ingress תלוי באחסון
cert-manager גבוהה מובנה מלאה RBAC ב-K8s
ידני (openssl) נמוכה לא לא סיכון דליפה
Cloudflare Origin CA נמוכה חלקי דרך tunnel מנוהל על ידי CF
ספק הגבלת אסימון API זמן התפשטות תמיכת cert-manager
Cloudflare לפי אזור 60-120 שניות ClusterIssuer מובנה
AWS Route53 מדיניות IAM 60-300 שניות ClusterIssuer מובנה
Yandex Cloud אסימון IAM 60-180 שניות webhook חיצוני
Selectel מפתח API 60-120 שניות webhook חיצוני

הגדרת תעודת תווית כלל-מקיף באמצעות cert-manager

אנו משתמשים ב-cert-manager כתקן דה-פקטו עבור Kubernetes. התהליך כולל:

  1. התקנת cert-manager דרך Helm.
  2. יצירת ClusterIssuer עם ספק DNS-01.
  3. יצירת משאב Certificate עם שם תווית כלל-מקיף.
  4. הגדרת שכפול Secret אוטומטי.
  5. אינטגרציה עם בקר Ingress (nginx, traefik, AWS ALB).

כל התהליך אוטומטי ב-Ansible roles וב-Terraform modules שלנו. זמן ממוצע: שעתיים. לדוגמה, ללקוח אחד היו 15 תתי-דומיינים — לאחר ההתקנה, זמן תחזוקת התעודה ירד לאפס, ותקלות הקשורות לפקיעת תוקף ירדו מ-3 לרבעון ל-0.

תעודות Let's Encrypt תקפות ל-90 יום; cert-manager מחדש אותן אוטומטית לפני הפקיעה. אנו מגדירים renewBefore ל-30 יום ומנטרים את הצלחת החידוש.

טעויות נפוצות בהגדרת תווית כלל-מקיף
  • שימוש באתגר HTTP-01 במקום DNS-01 — התעודה לא תונפק.
  • הרשאות אסימון API שגויות — רחבות מדי או צרות מדי.
  • חוסר בשכפול Secret ב-K8s — התעודה לא תגיע ל-namespaces אחרים.
  • שכחת הוספת הדומיין הראשי כ-SAN — # Аннотация на Secret для reflector annotations: reflector.v1.k8s.emberstack.com/reflection-allowed: "true" reflector.v1.k8s.emberstack.com/reflection-allowed-namespaces: "production,staging" נשאר לא מוגן.
  • חוסר ניטור חידוש — התעודה פוקעת, האתרים נופלים.

סיבוב מפתח פרטי

TLS עם תווית כלל-מקיף מכסה דומיינים רבים — פשרה של המפתח הפרטי משמעותה פשרה של כל תתי-הדומיינים בבת אחת. אחסנו את המפתח הפרטי בקפידה:

  • אל תבצעו commit ל-git
  • אל תאחסנו בצ'אטים, כרטיסים
  • גישה ל-ClusterSecret רק ל-root
  • ב-Kubernetes — Secret חייב לכלול RBAC עם גישה מוגבלת

cert-manager מסובב את המפתח הפרטי כברירת מחדל בכל חידוש (kubernetes-replicator). זה טוב לאבטחה אך עלול לגרום להשבתה קצרה במהלך החידוש — בקר ה-Ingress חייב לקלוט את המפתח החדש.

מתי תווית כלל-מקיף אינה מתאימה

תווית כלל-מקיף נוחה אך אינה אוניברסלית. אם לתתי-דומיינים יש בעלים או צוותים שונים, שירות אחד שנפרץ תחת apiVersion: v1 kind: Secret metadata: name: wildcard-tls namespace: cert-manager annotations: replicator.v1.mittwald.de/replicate-to: "production,staging,dev" עלול להשתמש במפתח ה-TLS כדי ליירט תעבורה של תת-דומיין אחר. עבור שירותים עם רמות אמון שונות, הנפיקו TLS בנפרד. כמו כן, חלק משירותי CI/CD וענן אינם תומכים בתווית כלל-מקיף בתצורות שלהם ומצפים לשמות דומיינים מפורשים.

מה כלול בעבודה

  • הנפקת TLS עם תווית כלל-מקיף דרך DNS-01 (certbot או cert-manager)
  • הגדרת חידוש אוטומטי (cron או cert-manager)
  • שכפול Secret בין namespaces (reflector / kubernetes-replicator)
  • ניטור חידוש (התראות על פקיעה 30 יום לפני)
  • תיעוד ו-runbook לצוות

העלות נקבעת לאחר ניתוח בהתבסס על מספר הדומיינים וספק ה-DNS. צרו קשר להערכת פרויקט. קבלו ייעוץ ממהנדס.