ACME, sertifika başvurusu ve alan adı doğrulamasını otomatikleştiren bir protokoldür. Bu protokolü kullanan istemcinin doğrulama dosyasını sunucuda oluşturması, HTTP-01 doğrulamasının başarılı olacağı anlamına gelmez. Sertifika otoritesinin doğrulama hizmeti, yerel dosya sistemine bakmaz; alan adını DNS üzerinden çözümler ve internete açık HTTP hizmetinden beklenen yanıtı ister.

CDN, web isteklerini farklı konumlardaki sunuculardan karşılar. Ters proxy ise istemciden aldığı isteği arkadaki kaynak sunucuya ileten bir aracıdır. Bu bileşenlerden biri aradaysa HTTP-01 isteği önce ona ulaşır; yanlış kaynak sunucu seçimi, kapalı port 80 veya isteği değiştiren bir kural doğrulamayı engelleyebilir.

HTTP-01 İsteğinin İzlediği Yol

HTTP-01 için sertifika otoritesi istemciye token adı verilen, o doğrulama işlemine özel bir karakter dizisi verir. İstemci, token ile hesabının açık anahtarından hesaplanan özeti birleştirerek key authorization değerini oluşturur. Bu değer http://example.com/.well-known/acme-challenge/TOKEN biçimindeki adreste sunulur; örnekteki alan adı ve TOKEN gerçek işlemdeki değerlerle değiştirilir. Doğrulayıcı, yanıt gövdesinin beklediği değerle eşleşip eşleşmediğini kontrol eder.

  1. ACME istemcisi aldığı token için beklenen yanıtı hazırlar.
  2. Alan adının DNS kayıtları, doğrulayıcıyı CDN'e, yük dengeleyiciye veya doğrudan web sunucusuna götürür.
  3. HTTP isteği port 80 üzerinden yayımlanan hizmete ulaşır.
  4. CDN veya ters proxy isteği kendi kurallarına göre önbellekten yanıtlayabilir, yönlendirebilir ya da bir kaynak sunucuya iletebilir.
  5. Son HTTP yanıtının gövdesi beklenen anahtar yetkilendirme değeriyle eşleşirse doğrulama başarılı olur; istek ulaşamazsa veya içerik farklıysa doğrulama başarısız olur.

ACME istemcisinin doğrulama dosyasını doğru yere yazması tek başına yeterli değildir. İstemci kaynak sunucu A üzerinde çalışırken CDN trafiği kaynak sunucu B'ye gönderiyorsa, dosya yerel olarak mevcut olsa bile dış doğrulayıcı onu hiç görmez.

Yerel Test ile Dış Doğrulama Arasındaki Farklar

Yönetici doğrulama dosyasını kaynak sunucuda açabiliyor diye dış doğrulayıcının da aynı sunucuya ulaştığı varsayılmamalıdır. Yerel DNS, hosts dosyası, VPN, özel ağ adresi veya doğrudan kaynak sunucunun IP adresiyle yapılan test CDN'i tamamen atlayabilir. ACME doğrulayıcısı ise alan adının internette yayımlanan DNS sonucunu kullanır ve o yolun ulaştırdığı HTTP hizmetini görür.

Aynı alan adı için IPv4 adreslerini bildiren birden fazla A kaydı veya IPv6 adreslerini bildiren birden fazla AAAA kaydı bulunabilir. Farklı CDN uç noktaları ve eski altyapıdan yeni altyapıya geçiş sırasında birlikte yayımlanan adresler, istekleri farklı sunuculara ulaştırabilir. Bir adres doğru doğrulama yanıtını verirken diğer adres 404 döndürüyorsa sorun yalnız “dosya var mı?” sorusuyla bulunamaz. Yayımlanan her erişim yolunun aynı etkin doğrulama işlemi için tutarlı davranması gerekir.

Tarayıcıdaki tek başarılı deneme bu nedenle yeterli kanıt sayılmaz. DNS'in dışarıdan hangi hedefleri döndürdüğünü, HTTP isteğinin hangi katmana ulaştığını ve yinelenen isteklerde yolun değişip değişmediğini birlikte kontrol edin. CDN yapılandırması yeni değiştiyse dış DNS yanıtlarında eski adreslerin kalıp kalmadığına ve bu adreslerde doğrulama yanıtının sunulup sunulmadığına bakın. Coğrafi dağıtım nedeniyle farklı ağlarda farklı IP adresleri görülmesi tek başına hata değildir.

CDN Arkasında En Yaygın HTTP-01 Hata Nedenleri

Başarısızlığın kaynağı çoğu zaman tek bir “sertifika hatası” değildir. İstek zincirindeki her katman aynı doğrulama yoluna müdahale edebilir; dışarıdan görülen yanıtı içeride beklenen yanıtla karşılaştırmak sorunun hangi katmanda başladığını gösterir.

CDN İsteği Yanlış Kaynak Sunucuya veya Varsayılan Siteye Gönderiyor

CDN yapılandırmasında birden fazla kaynak sunucu, alan adına dayalı yönlendirme veya yol tabanlı kural bulunabilir. Normal sayfalar doğru çalışırken /.well-known/acme-challenge/ yoluna gelen istekler, bu yola özel bir kural nedeniyle doğrulama yanıtının bulunmadığı sunucuya gönderilebilir.

Kaynak sunucu aynı IP adresinde birden fazla site barındırıyorsa, gelen istekteki alan adına göre sanal site seçer. Bu eşleşmenin yanlış yapılması da benzer bir hataya yol açar. İstek beklenen site yerine varsayılan siteye düşerse 404, uygulama ana sayfası veya başka bir içeriğin 200 yanıtı dönebilir. Bu durumda dosya doğru sunucuda bulunsa bile doğrulayıcının aldığı içerik yanlıştır.

Ön Uç Sunucular Tutarsız Yanıt Veriyor

Yük dengeleme veya çok bölgeli CDN yapısında istekler, dış bağlantıları karşılayan farklı ön uç sunuculara ulaşabilir. Token yalnız bir düğümde mevcutsa doğrulama bazı denemelerde başarılı olurken bazılarında 404 nedeniyle başarısız olabilir.

Kalıcı çözüm, doğrulama içeriğini doğrulayıcının erişebileceği tüm ön uç sunucularda aynı anda sunmak veya bu yolu tek ve tutarlı bir doğrulama hizmetine yönlendirmektir. Özellikle sertifika otoritesi doğrulamayı farklı ağ noktalarından yineliyorsa rastgele arka uç sunucu seçimi bazı isteklerin doğrulama içeriğine ulaşamamasına yol açabilir.

HTTP'den HTTPS'e Yönlendirme Yanlış Hedefe Gidiyor

HTTP-01 başlangıç isteği port 80 üzerinden gelir. RFC 8555 doğrulayıcının yönlendirmeleri izlemesini önerir; kabul edilen protokol, port ve yönlendirme sayısı sertifika otoritesine bağlıdır. Son hedefin yolu başlangıçtaki yolla aynı olmak zorunda değildir, ancak o doğrulama için beklenen yanıtı sunmalıdır. Ana sayfa veya oturum açma ekranı döndüren bir hedef doğrulamayı geçiremez.

Örneğin Let’s Encrypt, en fazla 10 yönlendirme izler; yalnız HTTP veya HTTPS adreslerini ve 80 ya da 443 numaralı portları kabul eder. HTTPS hedefine yönlendirildiğinde o hedefin sertifikasını doğrulamaz. Bu davranış bütün sertifika otoriteleri için varsayılmamalıdır. Yalnız “301 veya 302 var” sonucuna değil, bütün hedeflerin kabul edilen koşullara uyup uymadığına ve son yanıtın gövdesine bakılmalıdır.

Port 80 Dışarıdan Erişilemiyor

RFC 8555'e göre HTTP-01 doğrulama isteği TCP port 80'e gönderilir. ACME istemcisinin farklı bir portta dinlemesi, dış doğrulayıcının o porta bağlanacağı anlamına gelmez. CDN dışarıdan port 80 üzerinden aldığı isteği kaynak sunucuya HTTPS veya başka bir yapılandırılmış port üzerinden iletebilir; kaynak sunucunun mutlaka port 80 dinlemesi gerekmez.

CDN port 80'i kabul etmiyorsa, DNS kayıtları erişilemeyen bir kaynak sunucuyu gösteriyorsa, güvenlik duvarı bağlantıyı engelliyorsa ya da internet servis sağlayıcısı veya barındırma hizmeti HTTP erişimini kapatıyorsa doğrulama dosyasına ulaşılamaz. Bu sorun genellikle içerik hatası yerine bağlantı reddi veya zaman aşımı biçiminde görülür.

CDN Önbelleği Eski 404 veya Eski Token Sunuyor

Doğrulama yolu önbelleğe alınırsa ACME istemcisi yeni dosyayı oluştursa bile CDN daha önce sakladığı 404 yanıtını veya önceki doğrulama içeriğini döndürebilir. Kaynak sunucuda yapılan kontrol doğru sonucu gösterirken dışarıdan CDN üzerinden yapılan isteğin farklı sonuç vermesi bu ihtimali güçlendirir.

Doğrulama yolunu önbellek dışında bırakmak eski yanıt riskini azaltır. Önbellek kullanılacaksa kısa saklama süresi tek başına yeterli sayılmamalı; etkin token yolunun güncel yanıtı döndürdüğü doğrulanmalıdır. Genel önbelleği bir kez temizlemek geçici çözüm olabilir; asıl ayar, sonraki doğrulamalarda eski 404 veya token yanıtının yeniden sunulmasını önlemelidir.

WAF, Bot Koruması veya Kimlik Doğrulama Araya Giriyor

Web isteklerini güvenlik kurallarına göre süzen WAF, otomatik istekleri engelleyen bot koruması, ülke veya IP adresi kısıtı ve zorunlu oturum açma doğrulama isteğini engelleyebilir. Doğrulayıcı JavaScript çalıştıran bir tarayıcı değildir; beklenen yanıt yerine etkileşim gerektiren CAPTCHA kontrolü, HTML giriş sayfası, 401 veya 403 dönmesi başarısızlığa yol açar.

WAF'ın tamamını kapatmak gerekmez. Yalnız doğrulama yoluna gerekli erişimi veren dar bir kural kullanmak, doğrulama kaynağını açık tutarken uygulamanın geri kalan güvenlik politikasını korur.

Yeniden Yazma veya Uygulama Yönlendirmesi Doğrulama Yolunu Yakalıyor

Tüm yolları yakalayan yeniden yazma kuralları, tek sayfa uygulama yönlendirmeleri veya uygulama çerçevesi yönlendiricileri bilinmeyen tüm yolları ana uygulamaya taşıyabilir. Böyle bir kural /.well-known/acme-challenge/ yolundan önce çalışırsa sunucu dosya yerine uygulama HTML'i, özel 404 sayfası veya başka bir yönlendirme döndürür.

Doğrulama yolunu genel yeniden yazma kurallarından önce açık bir kuralla işleyin. Web sunucusu ilgili dizini yayımlamıyorsa dosyanın fiziksel olarak doğru yerde bulunması yeterli olmaz.

HTTP-01 Token Yolunu Dışarıdan Kontrol Etme

Sorunu incelerken önce internetten görülen sonucu kontrol edin; yalnız ACME istemcisinin yerel çıktısına güvenmeyin. Doğrulama işlemi etkinken tam token yolunu kaydedin ve istemcinin beklediği yanıt ile dışarıdan alınan yanıtı karşılaştırın.

  1. Tam yolu doğrulayın: Tahmini bir dosya adıyla değil, o anki doğrulama işlemi için verilen token ile oluşan gerçek yolu kullanın.
  2. Port 80 üzerinden dışarıdan isteyin: Kontrolü mümkünse kaynak sunucunun kendi ağından değil bağımsız bir internet bağlantısından yapın.
  3. Durum koduyla yetinmeyin: 200 yanıtı tek başına yeterli değildir; gövde beklenen anahtar yetkilendirme değeriyle eşleşmelidir.
  4. Yönlendirmeleri sonuna kadar izleyin: Hangi alan adına, porta ve yola gidildiğini kontrol edin; son hedef etkin doğrulamanın beklenen yanıtını sunmalıdır.
  5. Kontrolü tekrarlayın: Birden fazla ön uç sunucu, IPv4/IPv6 veya coğrafi dağıtım varsa farklı dış ağlardan alınan sonuçların tutarlı olup olmadığına bakın.
  6. Katman günlüklerini karşılaştırın: CDN, yük dengeleyici ve kaynak sunucu kayıtlarında aynı isteğin nerede durduğunu veya hangi arka uç sunucusuna gönderildiğini belirleyin.

Kaynak sunucu doğrudan test edilebiliyor ve güvenlik politikası buna izin veriyorsa, bağlantıyı onun IP adresine yönlendirirken HTTP isteğindeki alan adını koruyun. Yalnız IP adresini URL’ye yazmak farklı bir sanal siteyi seçebilir. HTTPS kullanılıyorsa doğru site ve sertifika seçimi için bağlantı başında bildirilen SNI alan adı da korunmalıdır. Kaynak sunucu doğru yanıt verirken CDN yanlış yanıt veriyorsa sorun büyük olasılıkla CDN'nin uç noktadaki yönlendirme kuralından, önbellekten veya güvenlik kuralından kaynaklanır; kaynak sunucu da yanlış yanıt veriyorsa web sunucusunu, seçilen sanal siteyi, dosya yolunu ve uygulamanın yeniden yazma kuralını inceleyin.

Dış Yanıt Belirtileri ve Olası Sorun Katmanları

Tek bir HTTP durum kodu kesin teşhis sağlamaz, ancak dışarıdan görülen yanıt sorunun hangi katmanda aranacağına dair güçlü bir başlangıç noktası verir.

Dışarıdan görülen belirtiOlası katmanÖncelikli kontrol
404Yanlış kaynak sunucu, doğrulama dosyası eksik ön uç sunucu, yeniden yazma veya önbellekHangi arka uç sunucunun seçildiği ve doğrulama yolunun nasıl yayımlandığı
401 veya 403WAF, erişim kuralı veya kimlik doğrulamaDoğrulama yoluna uygulanan güvenlik politikası
301/302 sonrası yanlış içerikYönlendirme kuralıSon hedefte alan adı, port, yol ve yanıt gövdesi
Zaman aşımı veya bağlantı reddiPort 80, güvenlik duvarı veya ağ erişimiDışarıdan TCP/HTTP erişimi ve DNS hedefi
200 fakat yanlış gövdeÖnbellek, varsayılan site veya uygulama yönlendiricisiBeklenen anahtar yetkilendirme ile gerçek gövde karşılaştırması
Bazen 200, bazen 404Birden fazla ön uç sunucu veya tutarsız kaynak sunucu havuzuTüm düğümlerin aynı doğrulama yanıtını vermesi

Port 80 Açılamıyorsa DNS-01 ile Doğrulama

HTTP-01 için gerekli dış erişim sağlanamıyorsa, sertifika otoritesi ve ACME istemcisi desteklediğinde DNS-01 kullanılabilir. Bu yöntemde doğrulama değeri web sunucusunda değil, alan adının _acme-challenge altındaki TXT kaydında yayımlanır; böylece HTTP doğrulama isteğinin CDN üzerinden geçmesi gerekmez.

Otomatik yenileme için ACME istemcisinin bu TXT kaydını güncelleyebilmesi gerekir. DNS hizmetinin programla kayıt değiştirmeye izin veren API erişimi kullanılacaksa, istemciye yalnız gereken kayıtları yönetme yetkisi verin ve erişim anahtarını koruyun.