Sertifikaları Bir Daha Düşünmemek İçin Let's Encrypt Otomasyonu
Reklam
Let's Encrypt sertifikalarının ömrü tam olarak 90 gündür. Bu, manuel yenileme yapmayı imkansız kılacak kadar kısa bir süredir, yani otomasyon fiilen zorunludur. Devraldığım sunucuların çoğunda bir cron görevi (cron job) veya systemd zamanlayıcısı içine gizlenmiş bir certbot renew zaten bulunuyor (Certbot'un kurulum betiği bunu varsayılan olarak yapar).
Ancak bu, işin sadece yarısıdır. Neredeyse her zaman eksik olan kısım resmin geri kalanıdır: yenilenen sertifikanın web sunucusu tarafından gerçekten algılandığından emin olmak, wildcard (joker) sertifikaları doğru şekilde yönetmek ve sertifika bitmeden önce sessiz sedasız patlayan yenileme hatalarını tespit etmektir.
İnsanların unuttuğu "yeniden yükleme" adımı
Certbot bir sertifikayı yenilediğinde, yeni dosyaları /etc/letsencrypt/live/ornek.com/ altına yazar. Kendi kendine gidip Nginx, Postfix veya o sertifikayı kullanan başka herhangi bir servise bu yeni dosyayı sunmaya başlamasını söylemez.
Bunun çözümü, bir deploy kancası (deploy hook) kullanmaktır. Bu, başarılı bir yenileme işleminden hemen sonra Certbot'un otomatik çalıştırdığı bir betiktir:
certbot renew --deploy-hook "systemctl reload nginx"
Birden fazla servisin (web, mail vb.) aynı sertifikayı paylaştığı bir kurulumda, bu kanca tek seferde her şeyi halledebilir:
#!/bin/bash
# /etc/letsencrypt/renewal-hooks/deploy/reload-services.sh
systemctl reload nginx
systemctl reload postfix
systemctl reload dovecot
/etc/letsencrypt/renewal-hooks/deploy/ klasörüne atılan her şey, başarılı her yenilemenin ardından otomatik olarak çalışır. Monitörünüzün köşesinde duran 90 günde bir hatırlanacak bir not değildir; tek seferlik bir kurulum adımıdır.
Wildcard sertifikalar DNS-01 gerektirir
Certbot'un geçici olarak 80 portu üzerinden bir dosya sunduğu varsayılan HTTP-01 doğrulaması (challenge), wildcard (joker) sertifikalarda çalışmaz. Wildcard'lar, geçici bir TXT kaydı oluşturarak domain sahipliğini kanıtlayan DNS-01 doğrulamasını zorunlu kılar. Bir Certbot eklentisine sahip DNS sağlayıcılarında, bu süreç tamamen otomatikleştirilebilir:
certbot certonly \
--dns-cloudflare \
--dns-cloudflare-credentials /etc/letsencrypt/cloudflare.ini \
-d ornek.com -d '*.ornek.com'
Kimlik doğrulama (credentials) dosyası, yalnızca DNS kayıtlarını düzenleme yetkisi verilmiş bir API token'ı tutar. Certbot TXT kaydını oluşturur, internete yayılmasını bekler ve doğrulama bittikten sonra kaydı siler; tek bir manuel adım yoktur. Şu an bir wildcard'a ihtiyacınız olmasa bile bunu baştan ayarlayın. Müşteri bir wildcard talep ettiği an, diğer alternatifiniz her 90 günde bir manuel DNS-01 doğrulaması yapmaktır. Ki bu, er ya da geç unutulacak türden angarya bir iş yüküdür.
Hataları tarayıcıdan önce yakalamak
Asıl risk, sessiz yenileme hatalarıdır. Certbot, bir sertifikanın süresi dolana kadar haftalarca sessizce başarısız olabilir. Her çalışmasında yeniden denediği için, bu hataları izleyen bir mekanizmanız yoksa sorun olduğunu ancak canlı sitenizde devasa bir tarayıcı uyarısı çıktığında anlarsınız.
Haftalık olarak çalıştırılan basit bir bash betiği, bunu çok erkenden yakalar:
#!/bin/bash
# cert-expiry-check.sh
for domain in ornek.com mail.ornek.com; do
expiry=$(echo | openssl s_client -servername "$domain" -connect "$domain:443" 2>/dev/null \
| openssl x509 -noout -enddate | cut -d= -f2)
days=$(( ($(date -d "$expiry" +%s) - $(date +%s)) / 86400 ))
if [ "$days" -lt 14 ]; then
echo "UYARI: $domain sertifikasının dolmasına $days gün kaldı"
fi
done
Certbot'un varsayılan yenileme eşiği, sürenin dolmasına 30 gün kalasıdır. Bir sertifikanın bitimine 14 gün kalmış olması, yenilemelerin uzun süredir sessizce patladığını gösteren devasa bir kırmızı bayraktır. Sorunun faili neredeyse her zaman HTTP-01 doğrulamasını engelleyen yeni bir firewall kuralı, DNS-01 için süresi dolmuş bir API token'ı veya kimse Certbot konfigürasyonunu güncellemeden başka bir yere yönlendirilmiş bir alan adıdır.
Burada "otomasyon" aslında ne anlama geliyor?
Ortada var olan ancak servisleri yeniden yüklemeyen, wildcard'ları yönetemeyen ve patladığında size haber veremeyen bir cron görevi, otomasyon falan değildir. İçinde hala dolaylı yoldan bir insan (siz) barındıran aşırı kırılgan bir süreçtir ve müşteri size bağırana kadar bir sorun olduğunu bile bilmezsiniz.
Gerçek otomasyon; sertifikanın yenilendiği, servisin bu yeni sertifikayı anında kullanmaya başladığı ve arada bir şeyler koparsa kimsenin 90 günlük bir döngüyü hatırlamasına gerek kalmadan sizin anında uyarıldığınız bir düzendir. Bunu bir kez doğru kurduğunuzda, SSL sertifikaları sunucuda kendi başının çaresine bakabilen o nadir ve değerli bileşenlerden biri haline gelir.
Reklam