Let's Encrypt DNS Jetonu#
Havlunuzu yanınıza aldınız, ama iç ağdaki sunucunuzun sertifikası yine de yenilenmek istiyor. Biz DNS kapısını açıyoruz; siz sunucunuzu internete açmadan doğrulamayı tamamlıyorsunuz.
Ne işe yarar#
HTTP-01 doğrulamasında Let's Encrypt sunucunuza internetten HTTP üzerinden ulaşmalıdır; yalnız iç ağdan erişilen bir sunucuda bu yol çalışmaz.
DNS-01 ise _acme-challenge.<ad> altına bir TXT doğrulama değeri yazmanızı ister.
Let's Encrypt'ten joker sertifika almak için de DNS-01 gerekir.
Jeton, ACME istemcinize yalnız seçtiğiniz kaydın doğrulama değerlerini yönetme yetkisi verir.
Önce kaydı yayına alın#
- Domainler > (alan adı) > DNS bölümünü açın.
- Sertifika adınız
wifi.ornek.com.trise_acme-challenge.wifi.ornek.com.tradına bir TXT kaydı ekleyin; değer olarak"vt-acme-placeholder"kullanın. - Yönetişimli bir firmada değişiklik talebini tamamlayıp kaydın yayına alınmasını bekleyin. Bu işlem bir kez yapılır.
Jeton bu yer tutucu değeri hiçbir zaman silemez. Doğrulama değerleri gelir geçer; havlu yerinde kalır.
Jeton oluşturun#
- Domainler > (alan adı) > DNS yolunda ilgili TXT satırındaki Jeton düğmesine tıklayın.
- Let's Encrypt DNS jetonu penceresinde sunucuyu tanıyacağınız bir etiket yazın.
- 90 gün, 1 yıl veya 2 yıl sürelerinden birini seçip jetonu oluşturun.
dns.manageizni gerekir. - Jetonu sunucunuzun yalnız yetkili kullanıcının okuyabildiği kimlik bilgisi dosyasına kaydedin.
Bu pencerenin hafızası yok
Jeton yalnız bir kez gösterilir; pencereyi kapatınca tekrar okuyamazsınız.
Listede yalnız vtacme_ab12…wxyz gibi bir ipucu kalır.
Aşağıdaki vtacme_... değerini kendi jetonunuzla değiştirin.
lego ile#
lego v5 için (5.5.2 ile doğrulandı):
PDNS_API_URL=https://veriteknik.com/api/acme-dns \
PDNS_API_KEY=vtacme_... \
PDNS_TTL=120 \
lego run --accept-tos --email you@example.com --dns pdns -d wifi.ornek.com.tr
Galaksinin eski sürümleri
lego v4'te alt komut sonda yer alır: lego --accept-tos --email you@example.com --dns pdns -d wifi.ornek.com.tr run.
Aynı PDNS_* ortam değişkenlerini kullanın.
Yenilemede aynı lego run komutu --renew-days 30 seçeneğiyle kullanılır.
Örneğin lego ikilisi /usr/local/bin/lego konumundaysa aşağıdaki systemd servisi ve zamanlayıcı günde iki kez kontrol eder.
İlk sertifikayı da aynı --path /var/lib/lego seçeneğiyle alın ki servis hesap ve sertifika dosyalarını bulabilsin.
-
/etc/lego/acme-dnsdosyasını oluşturun, sahibirootve izni0600olsun:PDNS_API_URL=https://veriteknik.com/api/acme-dns PDNS_API_KEY=vtacme_... PDNS_TTL=120 -
/etc/systemd/system/lego-renew.servicedosyasını oluşturun:[Unit] Description=Renew ACME certificate [Service] Type=oneshot EnvironmentFile=/etc/lego/acme-dns ExecStart=/usr/local/bin/lego run --renew-days 30 --accept-tos --email you@example.com --dns pdns -d wifi.ornek.com.tr --path /var/lib/lego -
/etc/systemd/system/lego-renew.timerdosyasını oluşturun:[Unit] Description=Check ACME certificate twice daily [Timer] OnCalendar=*-*-* 00,12:00:00 RandomizedDelaySec=3600 Persistent=true [Install] WantedBy=timers.target -
sudo systemctl daemon-reloadvesudo systemctl enable --now lego-renew.timerçalıştırın.
Sertifikayı kullanan uygulamanın yenilenen dosyaları yüklemesini ayrıca yapılandırın.
lego v4 kullanıyorsanız servis komutunda ortak seçenekler başta, renew --days 30 bölümü sonda olacak şekilde lego --accept-tos --email you@example.com --dns pdns -d wifi.ornek.com.tr --path /var/lib/lego renew --days 30 kullanın.
acme.sh ile#
acme.sh v3.1.6 ile doğrulanan ayarlar:
export PDNS_Url=https://veriteknik.com/api/acme-dns
export PDNS_ServerId=localhost
export PDNS_Token=vtacme_...
export PDNS_Ttl=60
acme.sh --issue --dns dns_pdns -d wifi.ornek.com.tr
Let's Encrypt kullanmak için hesabınızı bu CA ile yapılandırın; gerekirse komuta --server letsencrypt ekleyin.
Kurulumda etkinleştirilen acme.sh cron'u yenilemeyi kendisi yapar; cron'un kurulu olduğunu ve sertifikayı kullanan uygulama için yükleme/yeniden yükleme ayarlarınızı kontrol edin.
Joker ve apex birlikte#
ornek.com.tr ve *.ornek.com.tr için _acme-challenge.ornek.com.tr kaydını ve ona bağlı jetonu kullanın.
Komuttaki alan adı seçenekleri -d ornek.com.tr -d '*.ornek.com.tr' olur.
İki doğrulama aynı ada iki değer yazar; bu desteklenir, sınır ad başına 10 ACME değeridir.
wifi.ornek.com.tr için oluşturduğunuz jeton apex kaydında çalışmaz.
Bir jeton çalınırsa ne olur?#
Çalınan jeton, bağlı olduğu ad ve *.ad için sertifika alınmasına izin verebilir.
Örneğin wifi.ornek.com.tr jetonu, wifi.ornek.com.tr ve *.wifi.ornek.com.tr sertifikaları için kullanılabilir.
Saldırgan trafiğin yoluna girebiliyorsa bu sertifikayla sunucunuzu taklit edebilir.
Başka ad, kayıt türü veya zone yazamaz; zone'un geri kalanını okuyamaz, yalnız kapsamındaki TXT kaydını görebilir.
CAA ile kilitleyin#
CAA, hangi sertifika otoritesinin sertifika verebileceğini belirleyen DNS kaydıdır.
Aşağıdaki kayıtları hedef ada, burada wifi.ornek.com.tr adına ekleyin:
wifi.ornek.com.tr. CAA 0 issue "letsencrypt.org; accounturi=https://acme-v02.api.letsencrypt.org/acme/acct/<hesap-no>; validationmethods=dns-01"
wifi.ornek.com.tr. CAA 0 issuewild "letsencrypt.org; accounturi=https://acme-v02.api.letsencrypt.org/acme/acct/<hesap-no>; validationmethods=dns-01"
- lego için
accounts/.../account.jsoniçindekiurialanından, acme.sh için--register-accountçıktısındakiACCOUNT_URLalanından Let's Encrypt hesap adresini okuyun. - Örnekteki hesap adresini kendi üretim hesabınızın adresiyle değiştirin; staging hesabının adresi farklıdır.
- Kayıtları normal DNS ekleme akışından, yönetişimli firmada değişiklik talebiyle yayına alın.
Bu kısıt, DNS jetonuna ek olarak ilgili Let's Encrypt hesap anahtarını da gerekli kılar. CAA araması ağaçta yukarı doğru ilk bulunan kayıt kümesini kullanır; kayıtları apex'e koymak firmanızın başka CA'lardan aldığı diğer sertifikaları da etkileyebilir.
Galaksiye bırakılan izleri izleyin
Alan adınız için Certificate Transparency kayıtlarını crt.sh üzerinden takip edin ve bir CT izleme hizmetinde uyarı kurun. Beklemediğiniz bir sertifika, incelemeye değer bir sinyaldir.
Döndürme ve iptal#
- Aynı kayıt için yeni bir jeton oluşturun.
- Sunucunun ayarını güncelleyip yeni jetonla çalıştığını doğrulayın.
- Panelde eski jetonu iptal edin.
Süre bitimine 30 ve 7 gün kala oluşturana ve firmanın dns.manage yetkili üyelerine bildirim gelir.
Oluşturan kişi firmadan ayrılmışsa ona bildirim gönderilmez.
İptal edilmiş veya süresi dolmuş jeton yenileme yapamaz.
Sorun giderme#
| Belirti | Ne yapmalı? |
|---|---|
401 {"error":"Unauthorized"} |
Jeton yanlış, iptal edilmiş veya süresi dolmuş olabilir; alan adı başka hesaba geçmiş ya da sahipliği belirsizleşmiş de olabilir. Panelden kontrol edin. |
422 rrset outside token scope: <name> <type> |
Komuttaki -d ile jetonun bağlı olduğu adı eşleştirin. |
422 Only ACME challenge values (43-character base64url) can be written with this token: ... |
Elle bir değer eklemek yerine ACME istemcisini kullanın. |
422 At most 10 ACME challenge values are allowed at this name |
Aynı addaki doğrulama sayısını azaltın. |
429 Rate limit exceeded / Too many concurrent writes for this token |
Birkaç dakika bekleyin; üst üste veya paralel denemeleri durdurun. |
404 Could not find domain '<zone>.' |
Zone'un jeton kapsamıyla eşleştiğini kontrol edin. Özellik kapalıysa uç da 404 döner. |
| 403 | Origin başlığı taşıyan istekler reddedilir; tarayıcı yerine sunucudaki ACME istemcisini kullanın. |
| Let's Encrypt kaydı göremedi | DNS yayılmasını kontrol edin; lego için PDNS_PROPAGATION_TIMEOUT değerini artırın. |
Bir ada tek kaptan
Aynı ad için iki ayrı sunucu aynı anda yenileme yaparsa birbirinin doğrulama değerini ezebilir. Bir ada tek ACME istemcisi atayın.
Yayılma kontrolü ns1/ns2 için en fazla 25 saniye bekler ve notify yanıtı her zaman 200 olur; bu yanıt tek başına kaydın yayıldığını kanıtlamaz. İstemcinin kendi yayılma kontrolü de tamamlanmalıdır.