Gyro DNS ile Let's Encrypt joker sertifika: acme.sh, Certbot, Caddy, Traefik ve Kubernetes
1. Neden DNS doğrulaması ve neden ayrı bir anahtar?
Let's Encrypt, sertifika vermeden önce alan adının size ait olduğunu doğrular. Joker sertifika (*.ornek.com) yalnız DNS-01 yöntemiyle alınabilir: sertifika aracınız _acme-challenge.ornek.com adına geçici bir TXT kaydı yazar, Let's Encrypt bu kaydı okur, iş bitince kayıt silinir. DNS doğrulamasının başka artıları da vardır: sunucunun internete 80 numaralı portu açması gerekmez, iç ağdaki ya da henüz yayında olmayan sunuculara da sertifika alınabilir.
Bu kaydı yazmak için sertifika aracının DNS'inize erişmesi gerekir. Tam yetkili bir API anahtarını her sunucuya koymak risklidir; bu yüzden Gyro DNS'te yalnız bu iş için ACME anahtarı vardır:
| ACME anahtarı ne yapabilir? | Ne yapamaz? |
|---|---|
_acme-challenge ile başlayan adlara TXT değeri eklemek ve silmek (TTL 60 sn) |
Zone'larınızı okumak, başka kayıtları (A, MX, CNAME...) değiştirmek ya da silmek |
| Yalnız seçtiğiniz zone'larda çalışmak (isteğe bağlı) | Diğer hizmetlerinize, faturalara, hesap bilgilerinize erişmek |
| Yalnız belirttiğiniz IP adreslerinden kullanılmak (isteğe bağlı) | Yeni anahtar oluşturmak |
Anahtar sızsa bile en kötü ihtimalle doğrulama kaydı yazılabilir; panelden silmeniz yeterlidir. Her sunucu ya da küme için ayrı anahtar oluşturmanızı öneririz.
Hosting (cPanel) hesabınızdan gelen salt okunur zone'larda ACME anahtarı kullanılamaz; o alan adlarında cPanel'in kendi ücretsiz SSL'i (AutoSSL) çalışır. ACME anahtarı, Gyro DNS'te eklediğiniz zone'lar içindir.
2. ACME anahtarı oluşturun
- Müşteri panelinde Hizmetlerim → Gyro DNS hizmetinizi açın ve Yönetim sekmesine geçin.
- Soldaki menüde Gelişmiş → ACME / Let's Encrypt sayfasını seçin.
- Ad alanına anahtarı tanıyacağınız bir ad yazın (örneğin
web-01ya dak8s-prod). - Zone'lar listesinden anahtarın çalışacağı zone'ları seçin. Hiçbirini seçmezseniz anahtar bu hizmetteki tüm zone'larda çalışır.
- İsterseniz İzinli IP alanına sertifikayı alacak sunucunun IP adresini yazın (birden çoksa virgülle ayırın).
- Anahtar oluştur düğmesine basın. Anahtar (
wck_...) yalnız bu anda gösterilir; Kopyala ile alın ve güvenli bir yere kaydedin.
Aynı işlemi komut satırından ya da Terraform ile de yapabilirsiniz:
gyro dns acme-key create <hizmet-no> --name web-01 --zones ornek.com
gyro dns acme-key list <hizmet-no>
resource "gyro_dns_acme_key" "web" {
service_id = 12345
name = "web-01"
zones = ["ornek.com"]
}
Anahtarı silmek için tablodaki çöp kutusu simgesine basın ya da gyro dns acme-key delete <hizmet-no> <anahtar-no> çalıştırın; anahtar hemen geçersiz olur.
3. acme.sh
acme.sh kuruluysa Gyro DNS eklentisini indirip anahtarı verin:
curl -fsSL -o ~/.acme.sh/dnsapi/dns_gyro.sh https://raw.githubusercontent.com/Gyro-Hosting/gyro-acme/main/acme.sh/dns_gyro.sh
export GYRO_Token="wck_..."
acme.sh --issue --dns dns_gyro -d ornek.com -d '*.ornek.com'
Eklenti kaydı ekledikten sonra iki ad sunucumuzun da kaydı yayınlamasını bekler (genellikle bir dakikadan kısa), sonra Let's Encrypt'e "hazır" der. Anahtar acme.sh ayarlarına kaydedilir; yenilemeler acme.sh'ın kendi zamanlayıcısıyla otomatik yapılır. Sertifikayı web sunucunuza kopyalamak için acme.sh --install-cert komutunu kullanın.
4. Certbot
Eklentiyi Certbot'un kurulu olduğu Python ortamına kurun:
pip install "certbot-dns-gyro @ git+https://github.com/Gyro-Hosting/[email protected]#subdirectory=certbot-dns-gyro"
Anahtarı yalnız root'un okuyabileceği bir dosyaya yazın:
printf 'dns_gyro_token = wck_...\n' > /etc/letsencrypt/gyro.ini
chmod 600 /etc/letsencrypt/gyro.ini
certbot certonly --authenticator dns-gyro --dns-gyro-credentials /etc/letsencrypt/gyro.ini -d ornek.com -d '*.ornek.com'
Certbot'u snap ile kurduysanız bu eklenti snap içine kurulamaz; pip ile kurulmuş Certbot ya da acme.sh kullanın.
5. Caddy
Caddy'yi Gyro DNS modülüyle derleyin ve Caddyfile'da dns gyro kullanın:
xcaddy build --with github.com/Gyro-Hosting/caddy-dns-gyro
*.ornek.com, ornek.com {
tls {
dns gyro {env.GYRO_TOKEN}
}
reverse_proxy 127.0.0.1:8080
}
GYRO_TOKEN ortam değişkenine ACME anahtarınızı verin. Caddy sertifikayı alır, yeniler ve süresi dolmadan değiştirir.
6. Traefik ve lego
Traefik, exec DNS sağlayıcısıyla küçük gyro-acme-exec programını çalıştırır. Programı libdns-gyro sürümlerinden indirip konteynere bağlayın:
# traefik.yml
certificatesResolvers:
le:
acme:
email: [email protected]
storage: /letsencrypt/acme.json
dnsChallenge:
provider: exec
Traefik konteynerinin ortam değişkenleri:
EXEC_PATH=/usr/local/bin/gyro-acme-exec
GYRO_TOKEN=wck_...
EXEC_PROPAGATION_TIMEOUT=300
EXEC_POLLING_INTERVAL=10
Yönlendiricide (router) tls.certresolver=le ve tls.domains[0].main=ornek.com, tls.domains[0].sans=*.ornek.com ayarlayın. Aynı program lego komut satırı aracıyla da çalışır: EXEC_PATH=./gyro-acme-exec GYRO_TOKEN=wck_... lego --dns exec -d ornek.com -d '*.ornek.com' --email [email protected] run.
7. Kubernetes (cert-manager)
cert-manager kuruluysa Gyro DNS webhook'unu Helm ile ekleyin, anahtarı Secret olarak verin ve bir ClusterIssuer tanımlayın:
helm install cert-manager-webhook-gyro oci://ghcr.io/gyro-hosting/charts/cert-manager-webhook-gyro --namespace cert-manager
kubectl -n cert-manager create secret generic gyro-acme --from-literal=token='wck_...'
apiVersion: cert-manager.io/v1
kind: ClusterIssuer
metadata:
name: letsencrypt-gyro
spec:
acme:
server: https://acme-v02.api.letsencrypt.org/directory
email: [email protected]
privateKeySecretRef:
name: letsencrypt-gyro-hesap
solvers:
- dns01:
webhook:
groupName: acme.gyrohosting.com
solverName: gyro
config:
tokenSecretRef:
name: gyro-acme
key: token
Sonra Certificate kaynağında dnsNames: ["ornek.com", "*.ornek.com"] ve issuerRef: {name: letsencrypt-gyro, kind: ClusterIssuer} kullanın. Webhook yalnız Helm'de belirttiğiniz namespace'lerdeki Secret'ları okuyabilir ve root olmayan kullanıcıyla çalışır.
8. Başka araçlar: doğrudan API
Kullandığınız araç listede yoksa üç basit çağrı yeterlidir. Hizmet ve zone kayıt adından bulunur; yalnız ACME anahtarı gerekir:
API=https://www.gyrohosting.com/api/v1/client
# ekle
curl -X POST $API/cloud/dns/acme-challenge -H "Authorization: Bearer $GYRO_TOKEN" \
-H "Content-Type: application/json" -d '{"name":"_acme-challenge.ornek.com","value":"<DEGER>"}'
# hazır mı? (iki ad sunucusu da yayınlıyorsa "ready": true)
curl "$API/cloud/dns/acme-challenge?name=_acme-challenge.ornek.com&value=<DEGER>" -H "Authorization: Bearer $GYRO_TOKEN"
# sil
curl -X DELETE "$API/cloud/dns/acme-challenge?name=_acme-challenge.ornek.com&value=<DEGER>" -H "Authorization: Bearer $GYRO_TOKEN"
Ekleme yalnız verdiğiniz değeri ekler, aynı addaki diğer değerler kalır; bu sayede ornek.com ve *.ornek.com doğrulamaları aynı anda yapılabilir. Komut satırı karşılıkları: gyro dns acme-challenge add|status|remove. Tüm ayrıntılar: Geliştirici belgeleri.
9. Sık sorulan sorular
Joker sertifika için hangi adları istemeliyim?
Hem ornek.com hem *.ornek.com isteyin. Joker sertifika yalnız bir alt düzeyi kapsar: *.ornek.com, www.ornek.com ve api.ornek.com için geçerlidir ama ornek.com ya da a.b.ornek.com için geçerli değildir.
Doğrulama ne kadar sürer?
Kayıt yazıldıktan sonra iki ad sunucumuz da genellikle bir dakikadan kısa sürede yayınlar. Eklentiler bunu kendileri bekler; tüm işlem çoğunlukla 1-2 dakikada biter.
ACME anahtarım çalınırsa ne olur?
Anahtar yalnız _acme-challenge TXT kaydı yazabilir; sitenizin, e-postanızın kayıtlarına ya da hesabınıza dokunamaz. Yine de panelden silip yenisini oluşturun. Anahtarı IP ile sınırlarsanız başka yerden hiç kullanılamaz.
"zone_not_allowed" ya da "zone_not_found" hatası alıyorum. Alan adı bu hizmette yayında bir zone değilse (bekleyen, başka hizmette ya da hosting zone'u ise) ya da anahtar başka zone'lara sınırlıysa bu hatalar döner. Anahtarın zone listesini panelde kontrol edin.
Sertifika süresi dolmadan yenilenir mi?
Evet. acme.sh, Certbot, Caddy, Traefik ve cert-manager sertifikayı süresinin son haftalarında kendiliğinden yeniler; her yenilemede aynı ACME anahtarı kullanılır.
Let's Encrypt dışında bir sertifika sağlayıcısıyla da çalışır mı?
Evet. DNS-01 standart bir yöntemdir; ZeroSSL, Google Trust Services ya da kendi ACME sunucunuz gibi her ACME uyumlu sağlayıcıyla aynı anahtar kullanılabilir.
ACME anahtarlarını Terraform ile oluşturup doğrudan Kubernetes Secret'ına aktarabilirsiniz: gyro_dns_acme_key kaynağının token alanı yalnız oluşturma anında okunur ve state içinde gizli tutulur. Ayrıntı: Gyro DNS'i API, CLI ve Terraform ile yönetin.
Sıradaki adım
- Güvenliği artırın: zone'unuzu imzalamak için DNSSEC'i açın.
- Eklentilerin kaynak kodu ve sürümleri: github.com/Gyro-Hosting/gyro-acme
- Paketler: Gyro DNS
Geri bildiriminiz için teşekkürler!