
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.
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:
- DNS sağlayıcınıza API erişimi olmalı
- 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
- CloudFlare Dashboard > My Profile > API Tokens
- Create Token > Edit Zone DNS (template)
- Scope: Specific zone > siteniz.com
- 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:
fullchain.pemyerinecert.pemkullanıldı (zincir eksik)- Nginx/Apache reload edilmedi
- Server name doğru değil (
server_name *.example.comörneği) - 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
- HTTPS Sertifika Yenileme Sorunlar ve Çözümler
- Nginx SSL/TLS HTTPS Yapılandırması
- Web Sitesi SSL Sertifika Türleri
- Apache vs Nginx Web Sunucu Karşılaştırması
- DDoS Saldırıları ve Korunma
İ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:

