cPanel yıllıkta ücretsiz taşıma + SSLHemen İncele
Buyukweb
Wildcard SSL Sertifikası: Let's Encrypt ile Alt Alan Adı SSL Kurulumu

Wildcard SSL Sertifikası: Let's Encrypt ile Alt Alan Adı SSL Kurulumu

Wildcard SSL sertifikası ile *.siteniz.com — tüm subdomain'leri tek sertifikayla koruyun. DNS-01 challenge, certbot ve acme.sh Cloudflare DNS API ile pratik kurulum ve otomatik yenileme rehberi.

Büyükweb Editör EkibiHosting, Sunucu ve Sistem Yönetimi Editörü19 dakika okuma

Wildcard SSL Sertifikası: DNS-01 Challenge, certbot ve acme.sh ile Pratik Kurulum

10 tane subdomain'iniz var: api, admin, shop, blog, staging, mail, cdn, dev, pay, docs. Her birine ayrı Let's Encrypt sertifikası almak ve her birini ayrı ayrı yönetmek yerine tek bir *.siteniz.com wildcard sertifikasıyla hepsini bir seferde örtmek — hangisi daha mantıklı? Bu yazı tam da bu soruya pratik yanıt veriyor: DNS-01 challenge nasıl çalışır, certbot ile wildcard nasıl alınır, acme.sh + Cloudflare DNS API ile otomatik yenileme nasıl kurulur, cPanel AutoSSL wildcard için ne yapar, VDS'de Büyükweb'in önerilen yapılandırması ne?

Let's Encrypt'in kavramsal altyapısını (ACME protokolü, DV/OV/EV, 90 gün politikası, sertifika şeffaflık logları) arıyorsanız Let's Encrypt Nedir? Ücretsiz SSL, ACME ve Ekosistem Rehberi yazısına bakabilirsiniz. Burada doğrudan wildcard kurulumuna odaklanıyoruz.

Büyükweb perspektifi: cPanel hosting paketlerimizde AutoSSL, Let's Encrypt'i HTTP-01 challenge ile tek-domain/SAN sertifikalar için otomatik kuruyor. Wildcard için DNS-01 challenge gerektiğinden cPanel AutoSSL wildcard'ı doğrudan almıyor — cPanel wildcard ihtiyacı için destek hattımızdan talep açmanız gerekiyor, ekibimiz ek DNS yapılandırmasını sizin için hallediyor (0850 302 60 70). VDS müşterileri için certbot veya acme.sh ile DNS-01 wildcard tam esneklikle mümkün; Cloudflare DNS API ile otomatik yenileme yaygın kurulan yapılandırma.

Wildcard SSL Nedir ve Neden Gerekir?

*.siteniz.com şeklindeki wildcard sertifika, tek-seviyeli tüm alt alan adlarını tek sertifikayla kapsar.

Wildcard kapsam tablosu:

*.siteniz.com sertifikasıyla:
  api.siteniz.com         ✓ Kapsanır
  admin.siteniz.com       ✓ Kapsanır
  shop.siteniz.com        ✓ Kapsanır
  blog.siteniz.com        ✓ Kapsanır
  musteri-1.siteniz.com   ✓ Kapsanır (dinamik subdomain)
  tenant-99.siteniz.com   ✓ Kapsanır (SaaS multi-tenant)

Kapsam dışı:
  siteniz.com             ✗ Kapsanmaz (SAN olarak ayrıca eklenmeli)
  sub.api.siteniz.com     ✗ İki seviye derinlik *.*.siteniz.com ile çalışmaz

Önemli: Let's Encrypt ACME v2 (RFC 8555), iki seviyeli wildcard (*.*.siteniz.com) desteklemiyor. Yani dev.api.siteniz.com gibi ikinci seviye subdomain'ler için ayrı sertifika veya SAN gerekiyor.

Wildcard sertifika alırken tipik olarak hem *.siteniz.com hem siteniz.com birlikte talep edilir; bu sayede apex domain da aynı sertifika altında korunur.

Wildcard vs Multi-Domain SAN: Ne Zaman Hangisi?

İki yaklaşımın karşılaştırması:

Kriter Wildcard *.siteniz.com Multi-Domain SAN
Subdomain sayısı Sınırsız, dinamik Listede yazılı olanlar (3-100 arası)
DNS-01 challenge zorunlu mu? Evet — HTTP-01 kabul edilmez Hayır — HTTP-01 yeterli
cPanel AutoSSL desteği Hayır (ek kurulum gerekir) Evet — otomatik halleder
Yeni subdomain eklenince Sertifika değişmez, hemen kullanılır Sertifikaya yeniden eklemek gerekir
SaaS / multi-tenant uygunluğu Mükemmel Pratik değil
Gizlilik (CT logları) Tek kayıt, tüm subdomain'ler gizli Her SAN CT logunda görünür
cPanel hostingde kolay yol Destek talebiyle AutoSSL otomatik

Dürüst tavsiye — tercih etmeyin: 3-5 sabit subdomain'iniz varsa (www, api, blog gibi) wildcard almak gerekmez. cPanel AutoSSL bunları HTTP-01 ile zaten otomatik halleder; müdahale gerekmez. Wildcard gerçekten lazım olduğu durumlar:

  • Dinamik subdomain üretilen SaaS uygulamaları (musteri-1.siteniz.com, tenant-2.siteniz.com)
  • 10 veya daha fazla subdomain yönetilen ekosistemler
  • Subdomain listesini CT loglarında görünmesini istemediğiniz durumlar

DNS-01 Challenge: Wildcard'ın Tek Yolu

Let's Encrypt ACME v2'de wildcard sertifika yalnızca DNS-01 challenge ile alınabilir. HTTP-01 veya TLS-ALPN-01 ile wildcard mümkün değil.

DNS-01 challenge akışı:

1. ACME istemcisi Let's Encrypt'e wildcard talebini gönderir
2. Let's Encrypt: "_acme-challenge.siteniz.com TXT kaydına şu değeri yaz"
3. İstemci DNS sağlayıcınıza API ile veya manuel olarak TXT kaydı ekler:
   _acme-challenge.siteniz.com  IN  TXT  "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
4. Let's Encrypt DNS'i sorgular, değer doğrulanırsa sertifika imzalanır
5. TXT kaydı silinebilir (tekrar kullanılmaz)

DNS-01'in avantajları:

  • Port 80 veya 443 açık olmak zorunda değil
  • Güvenlik duvarı arkasındaki veya kamuya açık olmayan sunucularda çalışır
  • Otomasyon için DNS API kullanılabilir (certbot plugin, acme.sh dns hook)

DNS-01 ile otomatik yenileme için DNS sağlayıcınızın API erişimi olması gerekiyor. API yoksa sertifika her 90 günde manuel alınmak zorunda — bu durumda otomasyon çalışmaz.

certbot ile Wildcard Sertifika Alma

Manuel DNS-01 Challenge (Herhangi Bir DNS Sağlayıcı)

DNS API'niz yoksa veya tek seferlik kurulum yapıyorsanız:

# certbot kurulumu (Ubuntu/Debian)
sudo apt update && sudo apt install certbot -y

# Wildcard sertifika — manuel DNS-01 challenge
sudo certbot certonly   --manual   --preferred-challenges dns   --email destek@siteniz.com   --agree-tos   --no-eff-email   -d siteniz.com   -d *.siteniz.com

Certbot ekranda şunu gösterecek:

Please deploy a DNS TXT record under the name:
_acme-challenge.siteniz.com

with the following value:
AbCdEfGhIjKlMnOpQrStUvWxYz1234567890ABCD

Before continuing, verify the TXT record has been deployed.
Press Enter to Continue

DNS panelinize gidin, TXT kaydını ekleyin, propagasyonu bekleyin (genelde 30-120 saniye), sonra Enter'a basın. Başarılı olursa:

Congratulations! Your certificate and chain have been saved at:
/etc/letsencrypt/live/siteniz.com/fullchain.pem

Dikkat: --manual ile alınan wildcard sertifika otomatik yenilenemez. Her 90 günde bu adımları tekrarlamanız gerekir. Otomasyon istiyorsanız DNS API plugin kullanın.

certbot + Cloudflare DNS Plugin (Otomatik Yenileme)

# Cloudflare DNS plugin kurulumu
sudo apt install python3-certbot-dns-cloudflare -y
# veya pip ile:
# pip3 install certbot-dns-cloudflare

# Cloudflare API token dosyası oluştur
sudo mkdir -p /root/.secrets/certbot
sudo nano /root/.secrets/certbot/cloudflare.ini

cloudflare.ini içeriği:

dns_cloudflare_api_token = CF_API_TOKEN_BURAYA

Token izinleri: Cloudflare dashboard → API Tokens → Create Token → Zone:DNS:Edit (yalnızca ilgili zone için scoped token önerilir, Global API Key kullanmayın).

# Dosyayı güvenli hale getir
sudo chmod 600 /root/.secrets/certbot/cloudflare.ini

# Wildcard sertifika al
sudo certbot certonly   --dns-cloudflare   --dns-cloudflare-credentials /root/.secrets/certbot/cloudflare.ini   --email destek@siteniz.com   --agree-tos   --no-eff-email   -d siteniz.com   -d *.siteniz.com

# Dry-run ile yenileme testini kontrol et
sudo certbot renew --dry-run

acme.sh ile Wildcard: Cloudflare DNS API Örneği

acme.sh saf shell scripti olduğundan Python bağımlılığı yok; 150'yi aşkın DNS sağlayıcısını API ile destekliyor.

# acme.sh kurulumu
curl https://get.acme.sh | sh -s email=destek@siteniz.com
source ~/.bashrc

Cloudflare DNS API ile Wildcard

# Cloudflare API token (Zone:DNS:Edit izni)
export CF_Token="CF_API_TOKEN_BURAYA"
# Hesap ID veya Zone ID opsiyonel:
# export CF_Account_ID="hesap_id"
# export CF_Zone_ID="zone_id"

# Wildcard sertifika — ECDSA P-256 (önerilen)
~/.acme.sh/acme.sh --issue   --dns dns_cf   -d siteniz.com   -d *.siteniz.com   --keylength ec-256

# RSA 2048 tercih ediyorsanız:
# ~/.acme.sh/acme.sh --issue --dns dns_cf -d siteniz.com -d *.siteniz.com

acme.sh token değerini ~/.acme.sh/account.conf dosyasına otomatik kaydeder; sonraki yenilemeler için tekrar export gerekmez.

acme.sh Sertifikayı Nginx/Apache'ye Yükleme

# Nginx için sertifikayı deploy et
~/.acme.sh/acme.sh --install-cert   -d siteniz.com   --ecc   --cert-file /etc/nginx/ssl/siteniz.com.crt   --key-file /etc/nginx/ssl/siteniz.com.key   --fullchain-file /etc/nginx/ssl/siteniz.com.fullchain.pem   --reloadcmd "systemctl reload nginx"

DNS API Plugin Desteği

acme.sh 150+ farklı DNS sağlayıcısı için hazır plugin sunar (dns_cf Cloudflare, dns_cpanel cPanel/WHM API, dns_ovh OVH, ve büyük bulut DNS sağlayıcıları için ayrı eklentiler dahil). Hangi DNS yönetiminde olduğunuza göre uygun plugin seçilir; her birinin API token alma + ortam değişkeni belirleme adımı küçük farklarla benzer.

certbot tarafında 15+ resmi DNS plugin mevcut (certbot-dns-cloudflare, certbot-dns-cpanel, certbot-dns-ovh gibi). Tam liste için: ~/.acme.sh/acme.sh --list veya acme.sh resmi wiki dnsapi sayfası.

DNS API'niz Yoksa: RFC2136 ve acme-dns ile Self-Hosted DNS-01

Cloudflare gibi API destekli bir DNS sağlayıcı kullanmıyorsanız — örneğin kendi BIND/PowerDNS sunucunuzu işletiyorsanız veya domain registrar'ınız API sunmuyorsa — wildcard otomasyonu için iki alternatif var.

RFC2136 — Kendi DNS Sunucunuz İçin Dynamic Update

Self-hosted BIND, PowerDNS veya Knot DNS çalıştırıyorsanız RFC2136 dynamic DNS update ile certbot'u API'siz otomatikleştirebilirsiniz:

# 1. BIND sunucusunda TSIG key oluştur
tsig-keygen -a hmac-sha256 acme-update > /etc/bind/acme-key.conf
# 2. named.conf'a zone update-policy ekle
include "/etc/bind/acme-key.conf";

zone "siteniz.com" {
  type master;
  file "/var/lib/bind/siteniz.com.zone";
  update-policy {
    grant acme-update name _acme-challenge.siteniz.com. TXT;
    grant acme-update name *._acme-challenge.siteniz.com. TXT;
  };
};

/etc/letsencrypt/rfc2136.ini içeriği:

dns_rfc2136_server = 192.0.2.1
dns_rfc2136_port = 53
dns_rfc2136_name = acme-update
dns_rfc2136_secret = TSIG_SECRET_BURAYA
dns_rfc2136_algorithm = HMAC-SHA256
sudo chmod 600 /etc/letsencrypt/rfc2136.ini

sudo certbot certonly \
  --dns-rfc2136 \
  --dns-rfc2136-credentials /etc/letsencrypt/rfc2136.ini \
  -d siteniz.com -d *.siteniz.com

acme-dns — DNS Sağlayıcınıza Hiç Dokunmadan Wildcard

acme-dns, yalnızca ACME challenge'ları için çalışan küçük, özel bir DNS sunucusu. Mevcut DNS sağlayıcınızın zone dosyasına yazma yetkisi vermeden, sadece _acme-challenge kaydını bu sunucuya CNAME ile yönlendirirsiniz:

# acme-dns sunucusunu kur (kendi VDS'inizde)
docker run -d --name acme-dns -p 53:53 -p 53:53/udp -p 8080:8080 joohoi/acme-dns

# Yeni bir subdomain kaydı oluştur
curl -X POST http://acme-dns.siteniz.com:8080/register

Dönen yanıt:

{
  "username": "xxx",
  "password": "xxx",
  "fulldomain": "abcd1234.acme-dns.siteniz.com",
  "subdomain": "abcd1234"
}

Mevcut DNS panelinize (sadece bir kez, kalıcı olarak) şu CNAME'i eklersiniz:

_acme-challenge.siteniz.com  CNAME  abcd1234.acme-dns.siteniz.com

CNAME kaydı bir kere eklendikten sonra tüm sonraki yenilemeler acme-dns sunucusu üzerinden otomatik geçer — production DNS zone'unuza tekrar dokunmanız gerekmez. Bu, DNS API yetkisini üçüncü parti bir istemciye vermek istemeyen güvenlik odaklı kurulumlar için tercih edilen bir yöntem.

ACME İstemcisi Wildcard Desteği Karşılaştırması

İstemci Wildcard DNS-01 Otomasyon DNS Plugin Sayısı Platform
certbot ✓ Plugin tabanlı 15+ resmi Linux
acme.sh ✓ Hook tabanlı 150+ Linux/macOS/Shell
lego ✓ Dahili 75+ Go binary, cross-platform
win-acme (WACS) ✓ DNS validasyon 10+ Windows CLI
cPanel AutoSSL ✗ (ek kurulum gerekir) HTTP-01 — cPanel WHM

cPanel AutoSSL ve Wildcard: Gerçek Durum

cPanel AutoSSL Let's Encrypt'i HTTP-01 challenge ile çalıştırır; bu nedenle otomatik olarak wildcard sertifika alamaz. Mevcut durum:

  • Standart cPanel paketi: siteniz.com, www.siteniz.com, bilinen subdomain'ler için AutoSSL HTTP-01 ile otomatik çalışır
  • Wildcard ihtiyacı varsa: cPanel WHM tarafında Let's Encrypt DNS-01 plugin'i etkinleştirilmesi gerekiyor; bu ek yapılandırma gerektiriyor

Büyükweb cPanel'de wildcard yolu: Hosting destek hattımızdan talep açın (0850 302 60 70 veya destek@buyukweb.com). Ekibimiz WHM tarafında DNS-01 yapılandırmasını devreye alıyor. Kendiniz doğrudan yapamazsınız; bu, shared hosting ortamında WHM erişimi gerektiren bir işlem.

VDS müşterileri için durum farklı: root erişiminiz var, certbot veya acme.sh'ı istediğiniz gibi kurabilirsiniz — tam esneklik.

Büyükweb Hosting ve VDS'de Wildcard Kurulum Yolu

cPanel Web Hosting Müşterileri

  1. Destek talebi açın: "wildcard SSL kurulumu, *.siteniz.com"
  2. DNS sağlayıcınızı bildirin (Cloudflare mı, başka bir DNS mı?)
  3. Ekibimiz DNS-01 challenge için gerekli TXT kayıt değerini size iletir
  4. DNS panelinizde TXT kaydını eklersiniz
  5. Sertifika kurulur; yenileme sürecini de ekibimiz yönetir

VDS Müşterileri (E5-V4, E5-V2 vb.)

Root erişiminiz var; certbot veya acme.sh ile doğrudan kurabilirsiniz.

Büyükweb VDS'de yaygın yapılandırma: acme.sh + Cloudflare DNS API + cron. Cloudflare DNS kullanıyorsanız:

# 1. acme.sh kur
curl https://get.acme.sh | sh -s email=destek@siteniz.com

# 2. Cloudflare API token'ı set et
export CF_Token="CF_TOKEN_BURAYA"

# 3. Wildcard sertifika al
~/.acme.sh/acme.sh --issue --dns dns_cf   -d siteniz.com -d *.siteniz.com --keylength ec-256

# 4. Sertifikayı konuma kur
~/.acme.sh/acme.sh --install-cert -d siteniz.com --ecc   --fullchain-file /etc/ssl/siteniz.com.pem   --key-file /etc/ssl/siteniz.com.key   --reloadcmd "systemctl reload nginx"

# 5. Mevcut cron listesini kontrol et (acme.sh otomatik ekler)
crontab -l

Wildcard Yenileme: Cron Yapılandırması

acme.sh kurulumu sırasında crontab'a otomatik satır ekler. Kontrol etmek veya manuel kurmak için:

# acme.sh'ın eklediği otomatik yenileme (sabah 02:25 — günlük kontrol)
25 2 * * * "/root/.acme.sh"/acme.sh --cron --home "/root/.acme.sh" > /dev/null

certbot kullanıyorsanız:

# certbot yenileme cron (günde iki kez kontrol — Let's Encrypt önerisi)
0 */12 * * * root certbot renew --quiet --deploy-hook "systemctl reload nginx"

Yenileme log'unu izlemek için:

# certbot log
sudo tail -f /var/log/letsencrypt/letsencrypt.log

# acme.sh log
tail -f ~/.acme.sh/acme.sh.log

systemd Timer ile Yenileme: Cron'a Modern Alternatif

certbot kurulumu genelde kendi systemd timer'ını (certbot.timer) otomatik ekler, ancak crontab tabanlı yenileme kullanıyorsanız veya zamanlamayı özelleştirmek istiyorsanız systemd timer manuel olarak da kurulabilir:

# /etc/systemd/system/certbot-renew.service
[Unit]
Description=Certbot Yenileme

[Service]
Type=oneshot
ExecStart=/usr/bin/certbot renew --quiet --deploy-hook "systemctl reload nginx"
# /etc/systemd/system/certbot-renew.timer
[Unit]
Description=Certbot yenilemeyi günde iki kez çalıştır

[Timer]
OnCalendar=*-*-* 03,15:00:00
RandomizedDelaySec=1h
Persistent=true

[Install]
WantedBy=timers.target
# Aktive et
sudo systemctl daemon-reload
sudo systemctl enable --now certbot-renew.timer

# Kontrol
systemctl list-timers | grep certbot

RandomizedDelaySec, her sunucunun tam olarak aynı saniyede Let's Encrypt'e istek atmasını engelliyor — çok sayıda sunucunun aynı anda yenileme denemesiyle oluşan rate limit baskısını azaltıyor. Log kayıtları journald üzerinden journalctl -u certbot-renew.service ile izlenebiliyor.

Sertifika Monitoring: Süre Dolmadan Önce Uyarı Alma

Otomatik yenileme kurulu olsa bile (DNS API kimlik bilgisi süresi dolması, cron'un durması, disk dolması gibi nedenlerle) yenileme sessizce başarısız olabilir. Bağımsız bir monitoring katmanı bu tür sessiz arızaları yakalar.

Basit Bash Script + Cron

#!/bin/bash
# check-cert.sh
DOMAIN="siteniz.com"
DAYS_BEFORE_ALARM=14

EXPIRY=$(echo | openssl s_client -servername "$DOMAIN" -connect "$DOMAIN":443 2>/dev/null | \
  openssl x509 -noout -enddate | cut -d= -f2)
EXPIRY_TS=$(date -d "$EXPIRY" +%s)
NOW_TS=$(date +%s)
DAYS_LEFT=$(( (EXPIRY_TS - NOW_TS) / 86400 ))

if [ "$DAYS_LEFT" -lt "$DAYS_BEFORE_ALARM" ]; then
  echo "UYARI: $DOMAIN sertifikası $DAYS_LEFT gün içinde dolacak!"
fi

healthchecks.io ile Cron Monitoring (Dead Man's Switch)

Yenileme cron'unun kendisinin çalışıp çalışmadığını izlemek için healthchecks.io benzeri bir "dead man's switch" servisi kullanılabilir — cron başarılı her çalıştığında bir ping atar, belirlenen süre içinde ping gelmezse size bildirim gider:

0 9 * * * /usr/local/bin/check-cert.sh && curl https://hc-ping.com/UUID_BURAYA

Prometheus + Blackbox Exporter (Production Ortamlar)

Çok sayıda domain izlenen production ortamlarda Prometheus Blackbox exporter ile sertifika bitiş tarihi metrik olarak toplanabiliyor:

modules:
  http_2xx:
    prober: http
    timeout: 5s
    http:
      method: GET
      tls_config:
        insecure_skip_verify: false
# Alert kuralı
- alert: CertExpiringSoon
  expr: probe_ssl_earliest_cert_expiry - time() < 86400 * 14
  annotations:
    summary: "{{ $labels.instance }} sertifikası 14 günden az kaldı"

Nginx ve Apache: Wildcard Sertifika Yapılandırması

Nginx — *.siteniz.com server_name Matching

# /etc/nginx/conf.d/wildcard.conf

# HTTP → HTTPS yönlendirme
server {
    listen 80;
    server_name siteniz.com *.siteniz.com;
    return 301 https://$host$request_uri;
}

# Apex domain
server {
    listen 443 ssl http2;
    server_name siteniz.com;

    ssl_certificate     /etc/ssl/siteniz.com.pem;
    ssl_certificate_key /etc/ssl/siteniz.com.key;

    ssl_protocols       TLSv1.2 TLSv1.3;
    ssl_prefer_server_ciphers off;

    # ... root, index, location blokları
}

# Wildcard subdomain'leri yakalamak için genel blok
server {
    listen 443 ssl http2;
    server_name *.siteniz.com;

    ssl_certificate     /etc/ssl/siteniz.com.pem;
    ssl_certificate_key /etc/ssl/siteniz.com.key;

    ssl_protocols       TLSv1.2 TLSv1.3;

    # $host değişkeniyle subdomain'e göre ayır
    root /var/www/$host;
    index index.php index.html;

    # ... location blokları
}

Apache — Wildcard VirtualHost

# /etc/apache2/sites-available/wildcard-ssl.conf

<VirtualHost *:443>
    ServerName siteniz.com
    ServerAlias *.siteniz.com

    SSLEngine on
    SSLCertificateFile    /etc/ssl/siteniz.com.pem
    SSLCertificateKeyFile /etc/ssl/siteniz.com.key

    SSLProtocol -all +TLSv1.2 +TLSv1.3
    SSLHonorCipherOrder off

    # VirtualDocumentRoot ile subdomain'e göre dizin seç
    VirtualDocumentRoot /var/www/%-2.0.%-1/%1
    # Örn: blog.siteniz.com → /var/www/siteniz.com/blog/
    # Örn: api.siteniz.com  → /var/www/siteniz.com/api/
</VirtualHost>

Reverse Proxy ve Orkestrasyon Araçlarıyla Wildcard SSL

certbot veya acme.sh'ı elle çalıştırmak yerine, ACME yönetimini kendi başına üstlenen modern reverse proxy ve orkestrasyon araçları da wildcard için kullanılabiliyor:

Araç Wildcard Desteği Öne Çıkan Özellik
Caddy DNS-01 plugin ile HTTPS varsayılan açık, sıfır config, native ACME
Traefik DNS-01 plugin ile Docker/Kubernetes native, label tabanlı otomatik keşif
nginx-proxy-manager DNS-01 plugin ile Web UI tabanlı, komut satırı gerektirmez
cert-manager (Kubernetes) DNS-01 (ClusterIssuer) Kubernetes-native, çoklu cluster için merkezi sertifika yönetimi

Not: Caddy'nin native ACME desteği varsayılan olarak HTTP-01/TLS-ALPN-01 kullanır (tek domain otomatik HTTPS için pratik); wildcard için Caddyfile'a bir DNS-01 plugin'i (örneğin Cloudflare modülü) ayrıca eklenmesi gerekiyor:

# Caddyfile — DNS-01 ile wildcard (cloudflare modülü derlenmiş Caddy gerektirir)
*.siteniz.com, siteniz.com {
  tls {
    dns cloudflare {env.CF_API_TOKEN}
  }
  reverse_proxy localhost:8080
}

Traefik'te DNS-01 challenge docker-compose yapılandırması ve label'lar üzerinden tanımlanıyor:

# docker-compose.yml
services:
  traefik:
    image: traefik:v3
    command:
      - --certificatesresolvers.le.acme.dnschallenge=true
      - --certificatesresolvers.le.acme.dnschallenge.provider=cloudflare
      - --certificatesresolvers.le.acme.email=destek@siteniz.com
      - --certificatesresolvers.le.acme.storage=/letsencrypt/acme.json
    environment:
      CF_API_TOKEN: ${CF_TOKEN}
    labels:
      - traefik.http.routers.api.rule=Host(`api.siteniz.com`)
      - traefik.http.routers.api.tls.certresolver=le
      - traefik.http.routers.api.tls.domains[0].main=siteniz.com
      - traefik.http.routers.api.tls.domains[0].sans=*.siteniz.com

Kubernetes ortamında cert-manager, ClusterIssuer ve Certificate kaynaklarıyla wildcard sertifikayı deklaratif olarak yönetiyor:

# ClusterIssuer — Cloudflare DNS-01
apiVersion: cert-manager.io/v1
kind: ClusterIssuer
metadata:
  name: letsencrypt-dns
spec:
  acme:
    email: destek@siteniz.com
    server: https://acme-v02.api.letsencrypt.org/directory
    privateKeySecretRef:
      name: letsencrypt-account
    solvers:
      - dns01:
          cloudflare:
            apiTokenSecretRef:
              name: cf-api-token
              key: api-token
# Certificate — wildcard + apex
apiVersion: cert-manager.io/v1
kind: Certificate
metadata:
  name: siteniz-com-tls
spec:
  secretName: siteniz-com-tls
  issuerRef:
    name: letsencrypt-dns
    kind: ClusterIssuer
  dnsNames:
    - siteniz.com
    - "*.siteniz.com"

Bu araçlar özellikle Docker/Kubernetes tabanlı altyapılarda certbot'un manuel cron yönetimini ortadan kaldırıyor — sertifika yaşam döngüsü tamamen altyapı tanımının bir parçası oluyor.

Let's Encrypt Rate Limits

Wildcard denemeleri sırasında (özellikle test/debug aşamasında) Let's Encrypt'in hesap ve domain bazlı limitlerine takılmak yaygın bir sorun:

Limit Değer Aşılırsa Ne Yapılır
Sertifika / Registered Domain 50/hafta Bekleyin veya --staging ile test edin
Tekrarlanan sertifika (aynı SAN seti) 5/hafta Önceki sertifikayı yeniden kullanın
Failed validations 5/hesap/saat 1 saat bekleyin
Pending authorizations 300/hesap Tamamlanmamış eski orderları temizleyin
Names per certificate 100 SAN Birden fazla sertifikaya bölün
New orders 300/hesap/3 saat Bekleyin

Test ederken staging kullanın: Kurulumu deneme-yanılma ile test ediyorsanız gerçek (production) ortam yerine staging sunucusunu kullanın — staging'in rate limitleri çok daha yüksek ve gerçek (tarayıcı tarafından güvenilen) sertifika üretmez:

sudo certbot certonly --staging \
  --dns-cloudflare \
  --dns-cloudflare-credentials /root/.secrets/certbot/cloudflare.ini \
  -d siteniz.com -d *.siteniz.com

Kurulum staging'de sorunsuz çalıştıktan sonra --staging bayrağını kaldırıp production'a geçin.

Common Errors ve Çözümleri

Wildcard DNS-01 kurulumunda en sık karşılaşılan hatalar ve çözümleri:

Error: DNS problem: NXDOMAIN looking up TXT for _acme-challenge.siteniz.com

TXT kaydı henüz propagate olmadı. DNS sağlayıcınızın TTL'ini kontrol edin; kullandığınız plugin destekliyorsa propagasyon bekleme süresini artırın (--dns-cloudflare-propagation-seconds 60 gibi, parametre adı plugin'e göre değişir).

Error: too many certificates already issued

Rate limit'e takıldınız. certbot certificates ile mevcut sertifikanızı kontrol edin, gerçekten yeni bir sertifikaya ihtiyacınız yoksa mevcut olanı kullanmaya devam edin.

Error: urn:ietf:params:acme:error:rejectedIdentifier

Domain formatı yanlış veya wildcard seviyesi geçersiz (örneğin *.com gibi bir Public Suffix üzerinde wildcard talep edilmiş). Domain adını ve wildcard seviyesini kontrol edin.

Error: connection refused on port 80

Bu hata yalnızca HTTP-01 challenge'da görülür — wildcard DNS-01 kullandığınız için normalde karşılaşmazsınız. Görüyorsanız yanlışlıkla --preferred-challenges http seçilmiş olabilir.

Error: incorrect TXT record

Bir önceki denemeden kalan eski TXT kaydı temizlenmemiş olabilir. DNS panelinizden _acme-challenge TXT kayıtlarını manuel kontrol edip silin, tekrar deneyin.

ZeroSSL — Let's Encrypt Rate Limit'ine Takılırsanız Alternatif

ZeroSSL, Let's Encrypt ile aynı ACME protokolünü kullanan, ücretsiz 90 günlük sertifika sunan başka bir sertifika otoritesi. acme.sh üzerinden Let's Encrypt yerine ZeroSSL'i CA olarak seçmek mümkün:

# ZeroSSL hesabı kaydet
~/.acme.sh/acme.sh --register-account -m destek@siteniz.com --server zerossl

# Wildcard sertifika — ZeroSSL üzerinden
~/.acme.sh/acme.sh --issue --dns dns_cf \
  -d siteniz.com -d *.siteniz.com \
  --server zerossl

Bu, Let's Encrypt hesap limitine geçici olarak takıldığınızda (örneğin çok sayıda test denemesi yaptıysanız) devreye alabileceğiniz bir yedek yol. Sertifikanın işleyişi ve tarayıcı güveni Let's Encrypt ile aynı; ACME protokolü ortak. ZeroSSL'de web arayüzünden manuel sertifika üretimi ücretli olabiliyor, ancak acme.sh/certbot gibi ACME istemcileriyle otomatik alım ücretsiz kalmaya devam ediyor.

Sık Sorulan Sorular

Wildcard sertifika iki seviyeli subdomain'leri kapsar mı?

Hayır. *.siteniz.com yalnızca tek seviye kapsıyor: api.siteniz.com, shop.siteniz.com vb. staging.api.siteniz.com veya v2.api.siteniz.com gibi iki seviyeli subdomain'ler bu sertifikanın dışında kalıyor. Let's Encrypt *.*.siteniz.com şeklinde iki seviyeli wildcard vermiyor — bu ACME v2 standardında yok.

Wildcard ile multi-domain SAN arasındaki temel fark nedir?

Wildcard, önceden bilinmeyen veya sayısı değişen subdomain'ler için idealdir — SaaS uygulamaları gibi. SAN sertifika, üzerinde yazılı domain'leri kapsıyor; yeni domain eklemek için sertifikayı yeniden almak gerekiyor. Çok az ve sabit subdomain'iniz varsa (3-5 tane) SAN sertifika daha basit; cPanel AutoSSL onu HTTP-01 ile halledebiliyor.

DNS API olmadan wildcard otomasyon mümkün mü?

Hayır. --manual modda DNS-01 challenge'ı elle tamamlamak mümkün ama bu otomasyon değil; her 90 günde tekrarlamak gerekiyor. Otomatik yenileme için DNS sağlayıcınızın API'si ve ilgili plugin şart.

Cloudflare proxy (turuncu bulut) açıkken wildcard sertifika çalışır mı?

Let's Encrypt DNS-01 challenge doğrudan DNS'e bakıyor; Cloudflare proxy'nin açık veya kapalı olması challenge'ı etkilemiyor. Sertifika alındıktan sonra Cloudflare proxy aktifse trafik Cloudflare üzerinden geçiyor; kaynak sunucunuzdaki wildcard sertifika Cloudflare-to-origin bağlantısı için kullanılıyor (Cloudflare SSL modunu "Full (strict)" yapmanız önerilir).

cPanel AutoSSL wildcard sertifika neden almıyor?

AutoSSL HTTP-01 challenge kullanıyor; wildcard için DNS-01 zorunlu. HTTP-01 ile *.siteniz.com domain sahipliği kanıtlanamıyor. Wildcard almak için WHM tarafında Let's Encrypt DNS-01 plugin'inin etkinleştirilmesi gerekiyor; bu işlemi Büyükweb destek hattı yapıyor.

Wildcard sertifika Punycode (Türkçe) domain'lerde çalışır mı?

Evet. Let's Encrypt Punycode encoded domain'ler için wildcard sertifika verebiliyor. Örneğin xn--rnek-7ra.com için *.xn--rnek-7ra.com sertifika alınabiliyor. Certbot/acme.sh'da domain'i Punycode formatında belirtmeniz gerekiyor.

Wildcard sertifika alırken apex domain (siteniz.com) otomatik ekleniyor mu?

Hayır. *.siteniz.com wildcard apex domain'i (siteniz.com) kapsamıyor. Bu iki farklı SAN girişi: -d siteniz.com -d *.siteniz.com şeklinde ikisini birlikte belirtmelisiniz.

Renewal otomatik çalışmıyor, manuel ne yapayım?

Önce gerçek bir yenileme yapmadan test edin, sonra gerekiyorsa zorla yenileyin:

# Test (gerçek yenileme yapmaz, sadece simüle eder)
sudo certbot renew --dry-run

# Zorla yenileme (90 gün dolmamış olsa bile)
sudo certbot renew --force-renewal

# Belirli bir sertifikayı hedefleyerek
sudo certbot renew --cert-name siteniz.com --force-renewal

# Hata ayrıntıları için log
journalctl -u certbot.timer
cat /var/log/letsencrypt/letsencrypt.log

acme.sh kullanıyorsanız ~/.acme.sh/acme.sh --renew -d siteniz.com --force ile zorla yenileyip tail -f ~/.acme.sh/acme.sh.log ile hata ayıklayabilirsiniz.

Sertifika valid ama browser hata gösteriyor, sebebi ne olabilir?

Sertifika sunucuda geçerli görünse bile tarayıcı hata veriyorsa dört yaygın sebep var:

  1. Yanlış dosya kullanılmış: fullchain.pem yerine cert.pem sunucuya yüklenmiş — bu durumda ara sertifika (chain) eksik kalır ve bazı tarayıcılar/istemciler uyarı verir.
  2. Servis reload edilmemiş: Yeni sertifika diskte var ama nginx/apache eski sertifikayı bellekte tutmaya devam ediyor — systemctl reload nginx gerekiyor.
  3. server_name uyuşmuyor: server_name (nginx) veya ServerName/ServerAlias (Apache) sertifikadaki domainle eşleşmiyor — örneğin wildcard sertifika var ama VirtualHost apex domain'i kapsamıyor.
  4. Tarayıcı önbelleği: Eski sertifika tarayıcı tarafında cache'lenmiş — Ctrl+Shift+R (hard refresh) veya farklı bir tarayıcı/gizli sekme ile test edin.

Doğrulama için:

openssl s_client -connect siteniz.com:443 -servername siteniz.com

Bu komutun çıktısındaki sertifika zincirini ve bitiş tarihini kontrol ederek sunucudan gerçekte hangi sertifikanın sunulduğunu görebilirsiniz.

Sonuç

Wildcard SSL, subdomain sayısı fazla veya dinamik olan ekosistemler için Net kazanç: tek sertifika, tek yönetim noktası, CT loglarında subdomain listesi gizli. Bedeli: DNS-01 challenge zorunluluğu ve DNS API gereksinimi.

3-5 sabit subdomain'iniz varsa cPanel AutoSSL zaten HTTP-01 ile hallediyor — wildcard almanıza gerek yok. Wildcard gerçekten anlamlı olduğu yer: dinamik subdomain üreten SaaS uygulamaları, 10+ subdomain ekosistemi.

Büyükweb VDS'de certbot veya acme.sh + Cloudflare DNS API kurulumu standart bir öğleden sonra işi. cPanel hosting'de wildcard ihtiyacınız varsa destek hattımız (0850 302 60 70) WHM yapılandırmasını sizin için hallediyor. Let's Encrypt'in kavramsal altyapısı için Let's Encrypt Nedir? yazısına bakabilirsiniz.


İlgili Büyükweb Hizmetleri

Wildcard SSL kurulumu veya yapılandırma soruları için 0850 302 60 70 numaralı satış öncesi destek numaramıza ulaşabilir veya iletişim sayfamıza yazabilirsiniz.

Domain & DNS İlgili Hizmetlerimiz

Bu yazıda anlatılan teknik konuyu profesyonel altyapıyla deneyimleyin

Etiketler:

#ssl sertifikası#wildcard ssl#lets encrypt#certbot#https#dns challenge

Bu yazıyı paylaş

WhatsApp0850 302 60 70