הגדרת 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. התהליך כולל:
- התקנת cert-manager דרך Helm.
- יצירת ClusterIssuer עם ספק DNS-01.
- יצירת משאב Certificate עם שם תווית כלל-מקיף.
- הגדרת שכפול Secret אוטומטי.
- אינטגרציה עם בקר 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. צרו קשר להערכת פרויקט. קבלו ייעוץ ממהנדס.







