# Gyro DNS ile Let's Encrypt joker sertifika: acme.sh, Certbot, Caddy, Traefik ve Kubernetes

https://www.gyrohosting.com/bilgi-bankasi/makale/gyro-dns-lets-encrypt-joker-sertifika

- **Bu rehberde ne öğreneceksiniz**: Alan adınızın DNS'i Gyro DNS'teyse Let's Encrypt sertifikasını, `*.ornek.com` joker sertifikası dahil, DNS doğrulamasıyla (DNS-01) tamamen otomatik almayı ve yenilemeyi; bunun için yalnız doğrulama kaydı yazabilen kısıtlı **ACME anahtarı** oluşturmayı.
- **Süre**: 10 dakika
- **Kimin için**: Kendi sunucusunda, Docker ya da Kubernetes ortamında HTTPS sertifikası yöneten geliştiriciler ve sistem yöneticileri.
- **Gerekenler**: Gyro DNS hizmeti (Ücretsiz ya da Pro) ve bu hizmette yayında olan bir zone ([Alan adını Gyro DNS'e taşıma](https://www.gyrohosting.com/bilgi-bankasi/makale/gyro-dns-alan-adi-tasima)).

## 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.

> **Not**
> 
> 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

1. Müşteri panelinde **Hizmetlerim → Gyro DNS** hizmetinizi açın ve **Yönetim** sekmesine geçin.
2. Soldaki menüde **Gelişmiş → ACME / Let's Encrypt** sayfasını seçin.
3. **Ad** alanına anahtarı tanıyacağınız bir ad yazın (örneğin `web-01` ya da `k8s-prod`).
4. **Zone'lar** listesinden anahtarın çalışacağı zone'ları seçin. Hiçbirini seçmezseniz anahtar bu hizmetteki tüm zone'larda çalışır.
5. İsterseniz **İzinli IP** alanına sertifikayı alacak sunucunun IP adresini yazın (birden çoksa virgülle ayırın).
6. **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.

![ACME / Let's Encrypt: anahtarı burada oluşturur, zone ve IP ile sınırlar, sızan anahtarı tek tıkla silersiniz. Altta her araç için hazır komutlar vardır.](https://www.gyrohosting.com/resources/uploads/bilgi-merkezi/L15-01-tr.webp)

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](https://github.com/acmesh-official/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/gyro-acme@v0.1.0#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](https://github.com/Gyro-Hosting/libdns-gyro/releases) indirip konteynere bağlayın:

```
# traefik.yml
certificatesResolvers:
  le:
    acme:
      email: siz@ornek.com
      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 siz@ornek.com 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: siz@ornek.com
    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](https://www.gyrohosting.com/developers/).

## 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.

> **Biliyor muydunuz?**
> 
> 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](https://www.gyrohosting.com/bilgi-bankasi/makale/gyro-dns-api-cli-terraform).

## Sıradaki adım

- **Güvenliği artırın:** zone'unuzu imzalamak için [DNSSEC'i açın](https://www.gyrohosting.com/bilgi-bankasi/makale/gyro-dns-dnssec).
- Eklentilerin kaynak kodu ve sürümleri: [github.com/Gyro-Hosting/gyro-acme](https://github.com/Gyro-Hosting/gyro-acme)
- Paketler: [Gyro DNS](https://www.gyrohosting.com/gyro-dns)
