Buyukweb
Let's Encrypt ile Ücretsiz Wildcard SSL Sertifikası Alma

Let's Encrypt ile Ücretsiz Wildcard SSL Sertifikası Alma

Let's Encrypt ile *.siteniz.com wildcard SSL sertifikası nasıl alınır? certbot DNS challenge yöntemi, otomatik yenileme ve CloudFlare DNS API ile kurulum rehberi.

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

Let's Encrypt ile Ücretsiz Wildcard SSL Sertifikası Alma

Let's Encrypt, ücretsiz SSL sertifikaları sağlayan kar amacı gütmeyen bir sertifika otoritesidir. Wildcard sertifikaları (*.siteniz.com) tüm alt domainleri tek sertifika ile kapsar. Bu rehberde Wildcard SSL almanın yollarını ele alıyoruz.

Wildcard SSL Nedir?

Standart SSL: Yalnızca tek domain (siteniz.com veya www.siteniz.com)

Wildcard SSL: Tüm alt domainler dahil

  • siteniz.com
  • www.siteniz.com
  • blog.siteniz.com
  • api.siteniz.com
  • staging.siteniz.com

Let's Encrypt Wildcard Sertifikası Gereksinimleri

Let's Encrypt, wildcard için yalnızca DNS-01 challenge'ı destekler (HTTP challenge yeterli değil). Bu nedenle:

  1. DNS sağlayıcınıza API erişimi olmalı
  2. Certbot DNS eklentisi kurulmalı

Certbot ile Wildcard SSL (Manuel DNS Challenge)

Certbot Kurulumu

# Ubuntu
apt install certbot

# AlmaLinux
dnf install certbot

Wildcard Sertifika Talebi

certbot certonly   --manual   --preferred-challenges dns   -d "siteniz.com"   -d "*.siteniz.com"

Certbot bir TXT DNS kaydı oluşturmanızı ister:

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

with the following value:
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

DNS sağlayıcınızda bu TXT kaydını ekleyin, propagasyonu bekleyin (5-10 dakika) ve Enter'a basın.

Sertifika Konumu

/etc/letsencrypt/live/siteniz.com/
├── fullchain.pem    → Sertifika + zincir
├── privkey.pem      → Özel anahtar
├── cert.pem         → Sertifika
└── chain.pem        → Zincir

CloudFlare DNS API ile Otomatik Wildcard SSL

CloudFlare kullanıyorsanız DNS doğrulaması otomatik yapılabilir.

Certbot CloudFlare Eklentisi

# Ubuntu
apt install python3-certbot-dns-cloudflare

# AlmaLinux
pip3 install certbot-dns-cloudflare

CloudFlare API Token Oluşturma

  1. CloudFlare Dashboard > My Profile > API Tokens
  2. Create Token > Edit Zone DNS (template)
  3. Scope: Specific zone > siteniz.com
  4. Token'ı kopyalayın

Konfigürasyon

/etc/letsencrypt/cloudflare.ini:

dns_cloudflare_api_token = CF_API_TOKEN_BURAYA
chmod 600 /etc/letsencrypt/cloudflare.ini

Otomatik Wildcard Sertifika

certbot certonly   --dns-cloudflare   --dns-cloudflare-credentials /etc/letsencrypt/cloudflare.ini   -d siteniz.com   -d "*.siteniz.com"   --email [email protected]   --agree-tos   -n

Otomatik Yenileme

# Test
certbot renew --dry-run

# Cron job ile otomatik yenileme
echo "0 3 * * * certbot renew --quiet" >> /etc/crontab

Nginx ile Wildcard SSL Kullanımı

server {
    listen 443 ssl http2;
    server_name siteniz.com *.siteniz.com;

    ssl_certificate /etc/letsencrypt/live/siteniz.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/siteniz.com/privkey.pem;

    # SSL güvenlik ayarları
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers HIGH:!aNULL:!MD5;
}

Sertifika Durumu Kontrolü

certbot certificates              # Tüm sertifikalar
openssl x509 -noout -text -in /etc/letsencrypt/live/siteniz.com/cert.pem | grep -A2 Subject
openssl x509 -noout -dates -in /etc/letsencrypt/live/siteniz.com/cert.pem

Büyükweb Hosting SSL

Büyükweb'in [cPanel hosting](MASK54) paketlerinde AutoSSL ile Let's Encrypt sertifikaları otomatik kurulur. VDS kullanıcıları wildcard SSL için yukarıdaki yöntemi uygulayabilirler.

Sonuç

Let's Encrypt Wildcard SSL, çok sayıda subdomain kullanan siteler için mükemmel bir ücretsiz çözümdür. CloudFlare DNS API ile kurulum tamamen otomatize edilebilir ve 90 günde bir yenileme için manuel işlem gerekmez.

Wildcard SSL Sertifikasi Yönetim Ipuclari

Let's Encrypt Wildcard SSL sertifikanizi aldıktan sonra bazi yönetim pratiklerine dikkat etmeniz gerekir. Sertifika yenileme işlemini certbot renew komutu ile otomatiklestirmek icin crontab kullanin. DNS challenge yöntemini kullanan Wildcard sertifikalar icin DNS API entegrasyonu büyük kolaylik sağlar. Cloudflare ve diğer populer DNS sağlayicilari icin hazir eklentiler mevcuttur. Sertifika durumunu izlemek icin bir monitoring araci kurmak da faydalidir; süresi dolmadan once uyari almak kesintileri onler. Birden fazla subdomain kullanan projeler icin Wildcard SSL hem maliyet hem de yönetim acisindan büyük avantaj sağlar. Buyukweb.com hosting paketlerinde Let's Encrypt SSL sertifikalari otomatik olarak kurulmakta ve yenilenmektedir.

ACME Protokolü ve Let's Encrypt CA Hiyerarşisi

Let's Encrypt ACMEv2 (Automatic Certificate Management Environment) protokolü ile çalışır:

1. Account creation     → ACME server'a public key kaydı
2. Order creation       → Hangi domain'ler için sertifika
3. Authorization        → Her domain için challenge
4. Challenge solve      → DNS-01 / HTTP-01 / TLS-ALPN-01
5. Finalization         → CSR submit
6. Certificate download → x509 sertifika

CA hiyerarşisi (2024 sonrası):

  • Root: ISRG Root X1 (RSA-4096) + ISRG Root X2 (ECDSA P-384)
  • Intermediate: R10/R11 (RSA), E5/E6 (ECDSA)

Modern sunucular ECDSA tercih ediyor — küçük sertifika + hızlı handshake. Eski Android <7.0 hâlâ RSA gerektirir; --key-type ecdsa (ECDSA) veya --key-type rsa --rsa-key-size 4096 ile seçim yaparsınız.

Challenge Türleri Detaylı

Challenge Avantaj Dezavantaj Wildcard?
HTTP-01 basit; sunucu yeterli port 80 açık olmalı ✗ hayır
DNS-01 port erişimi gerekmez DNS API gerekli ✓ evet
TLS-ALPN-01 port 443 üzerinden nginx/apache ALPN destek ✗ hayır

Wildcard için DNS-01 zorunlu. *.example.com HTTP-01 challenge'da imkânsız çünkü "tüm subdomainler" için bir HTTP endpoint olamaz.

DNS-01 Çalışma Mantığı

1. Certbot ACME server'a "*.example.com istiyorum" der
2. Server "şu nonce'u _acme-challenge.example.com TXT kaydına yaz" der
3. Certbot DNS API ile TXT kaydı yazar
4. Server DNS lookup → match → sertifika imzalar
5. Certbot TXT kaydı temizler

DNS propagation (TTL süresi) bu süreçte kritik — düşük TTL (60-300 saniye) öneriliyor wildcard işlemi sırasında.

DNS Provider API Entegrasyonu

Certbot resmi/3. parti eklentileri:

Provider Plugin Token Tipi Hız
Cloudflare certbot-dns-cloudflare API Token (Zone:DNS:Edit) hızlı
API destekli DNS sağlayıcı certbot-dns-<saglayici> veya acme.sh --dns dns_<saglayici> Sağlayıcının API token / API key + secret hız değişken
Generic RFC2136 certbot-dns-rfc2136 TSIG key en esnek

acme.sh — Bash Alternatif

Certbot Python tabanlı; acme.sh saf Bash, daha hafif ve daha çok DNS provider destekler:

# Kurulum
curl https://get.acme.sh | sh -s [email protected]

# Default CA Let's Encrypt
~/.acme.sh/acme.sh --set-default-ca --server letsencrypt

# Cloudflare API ile wildcard
export CF_Token="cloudflare_api_token"
export CF_Account_ID="account_id"

~/.acme.sh/acme.sh --issue --dns dns_cf \
  -d example.com -d '*.example.com' \
  --keylength ec-256

# Kurulum (nginx sertifika konumuna)
~/.acme.sh/acme.sh --install-cert -d example.com \
  --ecc \
  --key-file       /etc/nginx/ssl/example.com.key \
  --fullchain-file /etc/nginx/ssl/example.com.crt \
  --reloadcmd     "systemctl reload nginx"

# Otomatik yenileme cron'u acme.sh kurulumunda otomatik eklenir
crontab -l | grep acme.sh

Avantaj:

  • Tek dosyalı bash script (Python paket bağımlılığı yok)
  • 100+ DNS provider desteği
  • ZeroSSL, Let's Encrypt, Buypass, Google Trust ACME server'larını destekler
  • ECC (ECDSA) default

Multi-Provider DNS-01 — RFC2136

DNS API'si olmayan veya daha güvenli bir yapı için RFC2136 dynamic DNS update:

# 1. BIND DNS server'da TSIG key oluştur
tsig-keygen -a hmac-sha256 acme-update > /etc/bind/acme-key.conf

# 2. /etc/bind/named.conf'a ekle
include "/etc/bind/acme-key.conf";

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

# 3. credentials.ini
dns_rfc2136_server = 192.0.2.1
dns_rfc2136_port = 53
dns_rfc2136_name = acme-update
dns_rfc2136_secret = TSIG_SECRET_HERE
dns_rfc2136_algorithm = HMAC-SHA256

# 4. Certbot
certbot certonly \
  --dns-rfc2136 \
  --dns-rfc2136-credentials /etc/letsencrypt/credentials.ini \
  -d example.com -d '*.example.com'

Self-hosted BIND/PowerDNS/Knot DNS için bu yöntem çalışır.

TLS-ALPN-01 Challenge

HTTP-01'in alternatifi — port 443 üzerinden ALPN extension ile çalışır. Wildcard değil ama özel kullanım:

# Caddy bunu native yapar
# Caddyfile
example.com {
  tls [email protected]
  reverse_proxy localhost:8080
}

Caddy'nin avantajı: HTTPS otomatik, ALPN-01 default; manual yapılandırma yok.

DNS Provider Olmadan — Self-Hosted Acme DNS

acme-dns — Let's Encrypt için özel, küçük DNS server. Mevcut DNS sağlayıcınıza dokunmaz, sadece _acme-challenge.example.com için CNAME eklersiniz:

# acme-dns server kurulum
docker run -d --name acme-dns -p 53:53 -p 53:53/udp -p 8080:8080 joohoi/acme-dns

# Register
curl -X POST http://acme-dns.example.com:8080/register

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

# Mevcut DNS'inize CNAME ekle:
# _acme-challenge.example.com  CNAME  abcd1234.acme-dns.example.com

# Certbot acme-dns plugin ile
certbot certonly \
  --manual \
  --preferred-challenges dns \
  --manual-auth-hook /usr/local/bin/acme-dns-auth.py \
  -d example.com -d '*.example.com'

Avantaj: Domain registrar'ınız API sunmasa bile wildcard mümkün. Yüksek güvenlik — production zone'a yazma yetkisi yok.

Multi-Wildcard ve Nested

# Tek sertifikada birden fazla wildcard
certbot certonly --dns-cloudflare \
  -d example.com \
  -d '*.example.com' \
  -d '*.dev.example.com' \
  -d '*.staging.example.com' \
  --email [email protected] --agree-tos -n

Önemli: Let's Encrypt sertifikalarda maximum 100 SAN sınırı var; tek sertifikada çok subdomain karışıklık yarattığında ayrı sertifikalar tercih edilir.

Otomatik Yenileme Hook'ları

Sertifika yenilendiğinde nginx/apache/mail server'lar reload olmalı:

# /etc/letsencrypt/renewal-hooks/deploy/reload-services.sh
#!/bin/bash

# Nginx graceful reload
if systemctl is-active --quiet nginx; then
  systemctl reload nginx
fi

# Apache
if systemctl is-active --quiet apache2; then
  systemctl reload apache2
fi

# Postfix + Dovecot (mail certleri için)
if systemctl is-active --quiet postfix; then
  systemctl reload postfix
fi
if systemctl is-active --quiet dovecot; then
  systemctl restart dovecot
fi

# HAProxy
if systemctl is-active --quiet haproxy; then
  systemctl reload haproxy
fi

# Slack bildirimi
curl -X POST -H 'Content-type: application/json' \
  --data "{\"text\":\"🔒 SSL renewed: $RENEWED_DOMAINS\"}" \
  https://hooks.slack.com/services/XXX/YYY/ZZZ
chmod +x /etc/letsencrypt/renewal-hooks/deploy/reload-services.sh

Cron / systemd Timer Yenileme

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

[Service]
Type=oneshot
ExecStart=/usr/bin/certbot renew --quiet --post-hook "systemctl reload nginx"

# /etc/systemd/system/certbot-renew.timer
[Unit]
Description=Run certbot renew twice daily

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

[Install]
WantedBy=timers.target

# Aktive
systemctl daemon-reload
systemctl enable --now certbot-renew.timer

# Kontrol
systemctl list-timers | grep certbot

Cron yerine systemd timer modern alternatif — log'lar journald'de + RandomizedDelaySec rate limiting'i azaltır.

Sertifika Monitoring

Sertifika süresi dolmadan önce uyarı al:

# 1. Bash script + cron — basit
#!/bin/bash
DOMAIN="example.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 "⚠ $DOMAIN sertifikası $DAYS_LEFT gün içinde dolacak!"
fi

# 2. Healthchecks.io ile cron monitoring
0 9 * * * /usr/local/bin/check-cert.sh && curl https://hc-ping.com/UUID
# 3. Prometheus + Blackbox exporter — production
modules:
  http_2xx:
    prober: http
    timeout: 5s
    http:
      method: GET
      tls_config:
        insecure_skip_verify: false

# Alert
- alert: CertExpiringSoon
  expr: probe_ssl_earliest_cert_expiry - time() < 86400 * 14
  annotations:
    summary: "{{ $labels.instance }} sertifikası 14 günden az"

Let's Encrypt Rate Limits

Limit Değer Aşılırsa
Sertifika / Registered Domain (eklendi 2026) 50/hafta bekle veya --server staging
Tekrarlanan sertifika (aynı SAN) 5/hafta önceki sertifikayı kullan
Failed validations 5/hesap/saat 1 saat bekle
Pending authorizations 300/hesap önceki orderları temizle
Names per certificate 100 SAN birden fazla sertifika
New orders 300/hesap/3 saat bekle

Test/staging için:

certbot certonly --staging ...    # rate limit yumuşak

Üretim deploy'a geçmeden önce staging'de doğrula → live'a geç.

Common Errors ve Çözümleri

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

TXT kaydı henüz propagate olmadı. --dns-propagation-seconds 120 artır.

Error: too many certificates already issued

Rate limit. Mevcut sertifikayı kullan (certbot certificates).

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

Domain Public Suffix List'te değil veya yanlış format.

Error: connection refused on port 80

HTTP-01 challenge için sunucu erişilebilir olmalı; firewall + Cloudflare proxy mode kontrolü.

Error: incorrect TXT record

Eski TXT kaydı temizlenmemiş. Manuel sil + tekrar dene.

Caddy / Traefik / nginx-proxy-manager

ACME yönetimini otomatize eden modern reverse proxy'ler:

Araç Highlight
Caddy HTTPS by default, sıfır config, built-in ACME
Traefik Docker/K8s native, auto-discovery, Let's Encrypt
nginx-proxy-manager UI tabanlı, beginner-friendly
Cert-Manager (K8s) Kubernetes-native, ClusterIssuer ile multi-cluster
HAProxy + acme.sh enterprise, manuel ama esnek
# Traefik docker-compose.yml örneği
services:
  traefik:
    image: traefik:v3
    command:
      - --certificatesresolvers.le.acme.dnschallenge=true
      - --certificatesresolvers.le.acme.dnschallenge.provider=cloudflare
      - [email protected]
      - --certificatesresolvers.le.acme.storage=/letsencrypt/acme.json
    environment:
      CF_API_TOKEN: ${CF_TOKEN}
    labels:
      - traefik.http.routers.api.rule=Host(`*.example.com`)
      - traefik.http.routers.api.tls.certresolver=le
      - traefik.http.routers.api.tls.domains[0].main=example.com
      - traefik.http.routers.api.tls.domains[0].sans=*.example.com

ZeroSSL — Let's Encrypt Alternatifi

ZeroSSL (Sectigo arkasında) ücretsiz 90-day sertifika + ACME desteği:

# acme.sh ile ZeroSSL
acme.sh --register-account -m [email protected] --server zerossl

acme.sh --issue --dns dns_cf \
  -d example.com -d '*.example.com' \
  --server zerossl

Avantaj: Let's Encrypt rate limit'lerine takılırsanız fallback. Dezavantaj: Web UI kayıtları ücretli.

Sıkça Sorulan Sorular

Wildcard vs SAN sertifika hangisini seçeyim?

SAN (Subject Alternative Name) = belirli subdomain'lerin listesi. Az sayıda subdomain → SAN; bilinmeyen veya çok subdomain → Wildcard. Multi-tenant SaaS gibi her müşteriye subdomain açan yapı wildcard zorunlu.

Wildcard SSL ne kadar derin? *.dev.example.com çalışır mı?

*.example.com SADECE 1 seviye — a.example.com ✓ ama a.b.example.com ✗. İki seviye için *.dev.example.com ayrı sertifika. Multi-level wildcard standartta yok.

"DNS-01 Cloudflare proxy ile çalışır mı?"

Evet — Cloudflare proxy (turuncu bulut) sertifikadan bağımsız. ACME challenge zone DNS API ile yapılır; Cloudflare HTTP-level proxy bağımsız çalışır. Origin sertifika istemiyorsanız bile wildcard subdomain'lerde HTTPS ücretsiz.

Sertifika 90 gün — niye kısa?

Güvenlik. Compromise olursa hızlı invalidation; otomatik yenileme zorunlu kılınır → otomasyon yaygınlaşır. Buna karşı ücretli CA'lar 1-2 yıl verir; ama 2024'ten beri max 90/45 güne çekiliyor.

Wildcard mail sunucu için kullanılır mı?

Evet — mail sunucusu da port 443'te değil, 25/465/587/993/995 portlarında SSL kullanır. Postfix/Dovecot smtpd_tls_cert_file ve ssl_cert aynı fullchain.pem'i gösterir; renewal hook ile reload otomatize.

Cloudflare API token vs Global API Key — hangisi?

API Token her zaman tercih: scope'a sahip (sadece DNS:Edit, sadece belirli zone). Global API Key tüm hesabınız üzerinde tam yetki — compromise olursa felaket. Token oluşturma 30 saniye, şart.

Hosting paketinde wildcard ücretsiz mi?

Paylaşımlı hosting'lerde wildcard genellikle yok — AutoSSL HTTP-01 challenge ile çalışır. Wildcard isteyenler VDS + Cloudflare DNS API ile self-managed yapar veya ücretli wildcard sertifikası satın alır ($60-200/yıl).

Büyükweb VDS paketlerinde root erişiminiz var — yukarıdaki yöntemleri direkt uygularsınız.

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

# Test (gerçek yenileme yapmaz)
certbot renew --dry-run

# Force yenileme
certbot renew --force-renewal

# Belirli sertifika
certbot renew --cert-name example.com --force-renewal

# Hata logu
journalctl -u certbot.timer
cat /var/log/letsencrypt/letsencrypt.log

"Sertifika valid ama browser hata gösteriyor"

Tipik sebepler:

  1. fullchain.pem yerine cert.pem kullanıldı (zincir eksik)
  2. Nginx/Apache reload edilmedi
  3. Server name doğru değil (server_name *.example.com örneği)
  4. Eski cache'lenmiş sertifika browser tarafında — Ctrl+Shift+R

openssl s_client -connect example.com:443 -servername example.com ile doğrula.

Cert Manager (K8s) wildcard için ne yapmalı?

# ClusterIssuer + DNS-01 (Cloudflare)
apiVersion: cert-manager.io/v1
kind: ClusterIssuer
metadata:
  name: letsencrypt-dns
spec:
  acme:
    email: [email protected]
    server: https://acme-v02.api.letsencrypt.org/directory
    privateKeySecretRef:
      name: letsencrypt-account
    solvers:
      - dns01:
          cloudflare:
            apiTokenSecretRef:
              name: cf-api-token
              key: api-token

# Certificate resource
apiVersion: cert-manager.io/v1
kind: Certificate
spec:
  secretName: example-com-tls
  issuerRef:
    name: letsencrypt-dns
    kind: ClusterIssuer
  dnsNames:
    - example.com
    - "*.example.com"

Büyükweb'de Let's Encrypt

Büyükweb cPanel hosting paketlerinde AutoSSL otomatik kurulur ve yenilenir (HTTP-01 challenge ile, tek-domain veya WWW SAN); wildcard sertifika cPanel default'unda yok.

VDS sunucu ve Plesk hosting paketlerinde wildcard mümkün — Plesk'te "Let's Encrypt extension + DNS-01" tek tıkla; VDS'te yukarıdaki certbot/acme.sh kurulumu.

Fiziksel dedicated paketlerinde tam kontrol — kendi acme-dns server'ınızı kurabilir, multi-tenant SaaS için unlimited wildcard yapabilirsiniz.

Yapılandırma desteği için 0850 302 60 70.

İlgili Rehberler

İlgili Büyükweb Hizmetleri

Yönetimini kontrol etmek istediğiniz sunucu için Büyükweb VDS / VPS / dedicated paketleri:

Sorularınız için 0850 302 60 70 numaralı destek hattımıza veya iletişim sayfamıza yazabilirsiniz.

Sunucu Yönetimi İlgili Hizmetlerimiz

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

Etiketler:

#ssl#let's encrypt#ssl sertifikası#sunucu#server yönetimi#sistem yönetimi

Bu yazıyı paylaş