Certbot "Challenge failed" hatası ve sertifika yenileme sorunları
Ücretsiz Let's Encrypt sertifikası almak için Certbot kullanıyorsunuz ve ekranda şuna benzer bir mesaj görüyorsunuz:
Certbot failed to authenticate some domains (authenticator: nginx).
Domain: ornek.com
Type: unauthorized
Detail: 203.0.113.10: Invalid response from http://ornek.com/.well-known/acme-challenge/...: 404
Let's Encrypt, alan adının gerçekten sizin sunucunuza ait olduğunu kanıtlamanızı ister. Bunun için alan adınız üzerinden 80 numaralı porta bir doğrulama isteği gönderir. Hata, bu isteğin sunucunuza ulaşamadığı ya da yanlış yanıt aldığı anlamına gelir. Detail satırı sebebi söyler.
Detail satırına göre çözüm
- Timeout during connect / Connection refused: 80 numaralı port dışarıya kapalı. Sunucudaki güvenlik duvarında (
sudo ufw allow 80/tcp) ve panelin güvenlik duvarı aracında 80'e izin verin. Nginx'in çalıştığını da kontrol edin:sudo systemctl status nginx. - DNS problem: NXDOMAIN / no valid A record: Alan adının A kaydı yok ya da yanlış.
dig +short ornek.comile sunucunuzun IP adresini görmelisiniz. Yeni eklediyseniz yayılmasını bekleyin: DNS yayılma süresi. - Invalid response ... 404: Alan adı sunucunuza geliyor ama Nginx bu alan adı için doğru siteyi sunmuyor. Siteye ait ayar dosyasında
server_namedoğru yazılmış ve etkin olmalı. Kontrol:sudo nginx -tvesudo nginx -T | grep server_name. - Invalid response ... 301 / 403 / 500: 80 numaralı porttaki istek başka bir yere yönlendiriliyor ya da engelleniyor. Sitenizin tüm trafiği https'e yönlendiriliyorsa
/.well-known/acme-challenge/yolu bu kuraldan etkilenmiyor olmalı. Certbot'un nginx eklentisi çoğunlukla bunu kendisi halleder. - Cloudflare kullanıyorsanız: bulut simgesi turuncu ise doğrulama Cloudflare üzerinden geçer. Çoğu zaman çalışır, çalışmazsa kaydı geçici olarak gri bulut (yalnızca DNS) yapın, sertifikayı alın, sonra turuncuya geri alın. Cloudflare'in SSL modunu da Full (strict) yapın.
Yenileme neden başarısız olur?
Sertifika 90 gün geçerlidir ve Certbot, bitmesine 30 gün kala yenilemeyi dener. Yenileme bir gün bozulursa bunu size kimsenin bildireceğine güvenmeyin; sertifika bitmeden önce sitenin sertifika tarihine ara sıra bakın. Önce deneme yapın:
sudo certbot renew --dry-run
sudo certbot certificates
sudo tail -n 40 /var/log/letsencrypt/letsencrypt.log
Deneme başarısızsa aynı Detail mesajlarını okuyun. Yenilemelerin zamanlayıcıyla çalıştığını doğrulamak için systemctl list-timers | grep certbot komutuna bakın.
Deneme sınırlarına dikkat
Let's Encrypt aynı alan adı için saatte beş başarısız doğrulamadan sonra bir süre yeni deneme kabul etmez. Hatayı düzeltmeden art arda denemeyin; önce --dry-run ile test edin, çünkü bu mod Let's Encrypt'in deneme (staging) sunucusunu kullanır ve gerçek sınırlarınızı tüketmez. Sertifikayı aldıktan sonra tarayıcıda hâlâ uyarı görüyorsanız bu makaleye bakın. İlk kurulum için ücretsiz SSL kurulumu yazımıza göz atın.
Sık sorulanlar
Alan adım www ile ve www olmadan çalışıyor, ikisine de sertifika alabilir miyim?
Evet: sudo certbot --nginx -d ornek.com -d www.ornek.com. İki adın da A kaydı sunucunuza işaret etmelidir, biri yanlışsa tüm istek başarısız olur.
Yenileme sonrası sitem yeni sertifikayı göstermiyor.
Nginx'in sertifikayı yeniden okuması gerekir: sudo systemctl reload nginx. Certbot normalde bunu kendi kancasıyla yapar, çalışmıyorsa elle yapın.
Wildcard sertifika (*.ornek.com) alabilir miyim?
Evet ama DNS doğrulaması gerekir; alan adı sağlayıcınızın API'si ile Certbot eklentisi kurmanız ya da TXT kaydını elle eklemeniz gerekir. Tek alan adı ve birkaç alt alan adı için normal sertifika yeterlidir.
İlgili makaleler
- Siteme ücretsiz SSL (https) nasıl eklerim?
- Tarayıcıda "Bağlantınız güvenli değil" (SSL) uyarısı çıkıyor
- Linux sunucuya web sitesi (Nginx) nasıl kurulur?
Sorununuz çözülmediyse destek talebi açın. Hangi adımı denediğinizi ve ekranda ne gördüğünüzü yazarsanız çözüm çok daha hızlı olur.
Geri bildiriminiz için teşekkürler!