Teknoloji

ACME Challenge Türleri Derinlemesine: HTTP‑01, DNS‑01 ve TLS‑ALPN‑01 Ne Zaman Hangisi?

Bugün yine ACME yüzünden bir kahve daha içtim: Giriş

Hiç başınıza geldi mi? Basit bir SSL yenilemesi yapacağım diye bilgisayar karşısında, elinizde dumanı tüten kahveyle, tarayıcının dönen çarkına bakakaldığınız oldu mu? Ben bugün tam da onu yaşadım. Eski bir projede sertifika otomasyonu takılmış, gece saatlerinde pof diye düşmüş; sabah ofise gelince fark ettim. “Bu işin bir yolu olmalı, hem de pürüzsüz olanı” diye içimden geçirdim. Sonra düşündüm, bu hikâyeyi anlatmak lazım, çünkü aynı düğüme takılan çok kişi var.

ACME’nin büyüsü burada: Alan adınızı gerçekten sizin yönettiğinizi ispatlıyorsunuz ve karşılığında sertifika alıyorsunuz. Ama bu ispatın üç farklı yolu var. Kimi zaman kapıdan (HTTP‑01), kimi zaman anahtar dolabından (DNS‑01), kimi zamansa sadece özel bir tokalaşmayla (TLS‑ALPN‑01). Her yol farklı bir ruh hâli, farklı bir pratik. Yazının kalanında, bu üç yöntemi birer küçük hikâye gibi ele alacağım. Mesela “WordPress’i paylaşımlı sunucuda barındırıyorum, hangisi daha zahmetsiz?”, ya da “Wildcard lazım, CDN kullanıyorum, nasıl olacak?” gibi sorulara, kendi deneyimimden örneklerle cevap vereceğim. En sonunda da “Hangi durumda hangisi?” sorusunu gerçek senaryolarla tatlı tatlı bağlayacağız.

ACME’yi mutfağa davet edelim: Mantık nasıl çalışıyor?

Bir adım geri çekilip tabloya bakınca mantık çok basit: Sertifika yetkilisi, “Bu alan adı gerçekten senin mi?” diye soruyor. Cevabını da üç farklı kanaldan bekliyor. Birincisi, “Web sunucunda belirli bir dosyayı bana göster” diyor; buna HTTP‑01 deniyor. İkincisi, “DNS’te belirli bir metni yayımla” diyor; bu DNS‑01. Üçüncüsü de “443 numaralı kapıda, belirli bir şekilde el sıkışalım” diyor; bu da TLS‑ALPN‑01.

Bu akışı daha derine çekmek istersen, Let’s Encrypt’in challenge türleri anlatımı gayet anlaşılır. Daha da temelini merak edenler için, ACME standardının resmi dokümanı tüm süreci anlatıyor. Ama gelin, biz burada mutfağın pratik kısmına odaklanalım. Çünkü günün sonunda iş, “Bugün hangi anahtar işimizi görür?” sorusuna geliyor. Benim deneyimimde, doğru yolu seçtiğinizde otomasyon tereyağı gibi akıyor; yanlış seçtiğinizde ise küçük tuzaklar sıraya diziliyor.

HTTP‑01: Trafiğin en kısa yolu

Nedir, nasıl görünür?

HTTP‑01, web sunucusuna konan küçük bir kanıt dosyası gibi. Sertifika yetkilisi, “www.orneksite.com/.well-known/acme-challenge/… adresine baktığımda şu içeriği görmeliyim” diyor. Eğer bu içerik doğruysa, alan adının kontrolünün sizde olduğuna inanıyor. Basit. Bu sadeliğin güzel tarafı, paylaşımlı veya yönetilen hosting ortamlarında genelde hazır destek sunulması. Pek çok panel, bir tıkla süreci uçtan uca hallediyor.

Ne zaman mantıklı?

Tek alan adları, küçük projeler, klasik WordPress veya tek uygulamalı siteler… Trafiginiz doğrudan sunucunuza gidiyorsa ve 80 numaralı kapıyı kullanabiliyorsanız, HTTP‑01 genelde en hızlı sonuç verir. Ayarlar basit, müşteri sitelerine kurarken anlatması kolay. Hatta çoğu zaman “kur ve unut” dediğimiz kolaylıkta çalışır.

Çatlaklar ve püf noktaları

İşler, CDN veya ters vekil işin içine girince karışabiliyor. Trafiği bir içerik dağıtım ağı üzerinden geçirirken, o küçük kanıt dosyasını yetkilinin görmesini garantilemek gerekiyor. Bazı CDN’ler bunu otomatik yönlendiriyor, bazıları ise özel kural istiyor. Bir de port 80 kapalıysa, ya da güvenlik duvarı altına saklandıysa, HTTP‑01 duvara tosluyor. O noktada çare ya portu açmak ya da farklı bir challenge’a geçmek oluyor. Deneyimim, küçük projelerde kolaylıkla yürürken, karmaşık altyapılarda sürpriz çıkarma ihtimalinin yüksek olduğudur. Önlem alırsanız, tadından yenmez.

DNS‑01: Alan adının kalbinden doğrulama

Nedir, nasıl görünür?

DNS‑01, alan adının DNS kayıtları üzerinden kanıtlama yapar. “Şu metin kaydını (TXT) şu isimle yayımla, ben de DNS üzerinden kontrol edeyim” der. Sonuç, sunucuya bir dosya koymak yerine, alan adının kalbinde bir iz bırakmaktır. Bu yaklaşım özellikle iki yerde parlıyor: Wildcard sertifikalar ve kapalı kapılar.

Ne zaman mantıklı?

Wildcard gerekiyorsa, DNS‑01 neredeyse tek gerçek seçenek. “Tüm alt alanlarım için tek seferde çözeyim” dediğinizde, bu yöntem bir altın anahtar gibi çalışır. İkincisi, altyapınızda port 80 ile uğraşmak istemediğiniz veya trafiği tamamen bir CDN arkasında tuttuğunuz durumlar. Sunucularınıza dışarıdan dosya erişimi olmadan doğrulama yapmak istiyorsanız, DNS‑01’den daha temiz bir yol yok. Çok kiracılı yapılarda, müşterilerin kendi alan adlarını bağlayıp otomatik sertifika almak istediklerinde de, DNS‑01 gerçek bir kurtarıcı. Bu konuyu detaylarıyla anlattığım SaaS’te özel alan adları ve DNS‑01 ile otomatik SSL kurmanın yolu yazısına göz atmak isteyebilirsin.

Çatlaklar ve püf noktaları

DNS yönetimini otomasyona açmak gerekir. Yani ACME istemcinizin, DNS sağlayıcınızda geçici TXT kayıtları oluşturmasına izin verirsiniz. API anahtarları, yetkiler, bazen iki faktör… Güvenli ve düzenli tutmak önemli. Bir de yayılma gecikmeleri var. Bazı DNS sağlayıcıları kayıtları anında tüm dünyaya duyururken, bazıları nazlıdır. Otomasyon adımlarında ufak gecikmeler planlamak işinizi kurtarır. Bir not daha: DNS sağlayıcınızı değiştirirseniz, otomasyonun yetkilerini güncellemeyi unutmayın; çünkü en sık kaçırılan köşe burasıdır.

TLS‑ALPN‑01: Sadece 443’te, sessiz bir tokalaşma

Nedir, nasıl görünür?

TLS‑ALPN‑01, web trafiğinin uğrak noktası olan 443 numaralı kapıda geçen bir el sıkışma ritüeli. Özetle, sertifika yetkilisi özel bir “acme-tls/1” mesajı ile gelir ve sunucunuzdan geçici, tek amaçlı bir sertifika bekler. Bu geçici sertifika doğruysa, “tamamdır” der. Bu yöntemin güzelliği, 80 numaralı kapıya hiç dokunmamasıdır. Yani kapıları kapalı bir ortamda, sadece 443 üzerinden konuşarak işi bitirir.

Ne zaman mantıklı?

Port 80’i açamıyorsanız, güvenlik politikalarınız sıkıysa, ya da sadece 443’ü kullanarak her şeyi yönetmek istiyorsanız, TLS‑ALPN‑01 hoş bir seçenek olur. Bazı modern ters vekiller ve servis mesh’ler bu yöntemi gayet güzel destekler. Özellikle konteyner tabanlı mimarilerde, ayrı bir “challenge endpoint” açmadan, trafiği sadece TLS katmanında halletme fikri huzur verir.

Çatlaklar ve püf noktaları

Bu yöntem, listenin en temiz görüneni olsa da, arkada düzgün bir orkestrasyon ister. Çünkü geçici bir sertifika üretip, doğru SNI ile anında servis etmeniz gerekir. Bazı CDN veya proxy katmanları bu özel el sıkışmayı görmeden trafik sonlandırdığı için, doğrulama dış katmanda “yutulabilir”. Bu yüzden, doğrulama anında trafiği doğrudan uygulama sonlandırıcınıza ulaştırmak gerekebilir. Teknik detaylarına meraklıysanız, TLS‑ALPN‑01 uzantısının teknik detayı oldukça açıklayıcıdır.

Hangi durumda hangisi? Gerçek senaryolarla düşünelim

Küçük bir WordPress sitesi, paylaşımlı hosting, sıfır uğraş

Bir müşterim, “Hiç uğraştırmasın, sadece sitem yeşil kilit göstersin” demişti. Paneli açtım, tek tıkla HTTP‑01’den doğrulayıp geçtik. Çünkü trafik doğrudan sunucuya gidiyordu, extra katman yoktu, port 80 açıktı. Gecenin bir vakti alarm çalmayacaksa, bu senaryo için en tatlı seçenek budur. Otomatik yenileme de panel tarafından kuruldu mu, hayat güzel.

CDN arkasında bir kurumsal site, firewall katmanı kalın

Başka bir projede, bütün trafik bir güvenlik duvarı ve CDN üzerinden akıyordu. Dosya servis etme işi, çeşitli kurallara takılıyor, .well-known yoluna özel istisna açmak bile kalabalık ekiplerin onayına bırakılmıştı. Bu gibi bir tabloda HTTP‑01 gereksiz sürtünme yaratır. DNS‑01 ise tam bir kurtarıcı oldu. DNS sağlayıcısına küçük bir API anahtarı verip, istemciye “hadi bakalım, TXT kaydını ekle” dedik. Sessiz sakin doğrulandı.

Wildcard istiyorum, alt alanlarımı tek çatıdan yürütmek

Hikâyenin en net sorusu: Wildcard istiyorsan, DNS‑01’e gidersin. Çünkü diğer yöntemler wildcard’a doğrudan destek vermez. Kapanışı da kolay: Bir kez otomasyonu kurduğunuzda, alt alan adları eklendikçe, uygulama katmanında işleri çözer, sertifika tarafında ekstra uğraşa girmezsiniz.

Port 80 kapalı, sadece 443 üzerinden yaşam

Bir güvenlik politikasında “80 numaralı kapı yasak, tüm trafik 443’ten” kuralı vardı. Ne yaptık? TLS‑ALPN‑01’i devreye aldık. Orkestrasyonun küçük bir modülünü yazıp, geçici sertifikayı anında servis edecek yapıyı hazırladık. İlk denemede proxy katmanı el sıkışmayı yuttu, ama doğrulama sırasında trafiği doğrudan uygulamaya yönlendiren bir kural ekleyince pürüz çözüldü. Bu örnek, yöntemin gücünü de sınırlarını da güzel anlatır.

Kubernetes, çoklu servis, bir sürü giriş noktası

Kubernetes tarafında, ingress denetleyici, rota kuralları, ayrı ayrı servisler… Böyle bir denklemde en önemlisi, ACME istemcisinin trafiği doğru pod’a ulaştırabilmesi. HTTP‑01 ile uğraşırken rota kuralını yanlış yerde tuttuğunuz olabiliyor. DNS‑01 ise burada da sade bir seçenek: Doğrulama trafiğini kümeye sokmadan, DNS üzerinden işi çözer. TLS‑ALPN‑01 de ayrıcalıklı; ama bu kez de el sıkışmayı doğru entrypoint’e taşıdığınıza emin olmanız gerekiyor. Hangisi? Kümeyi kim yönetiyor, kim neyi açıp kapatabiliyor, ona göre karar verirsiniz. Ben çoğu zaman, çok kiracılı veya çok girişli yapılarda DNS‑01 ile huzur buldum.

Otomasyon, hatalar ve küçük kurtarıcı numaralar

ACME istemcisi seçimi ve günlük hayatta rahatlık

Certbot, acme.sh, lego, cert-manager… İsimler farklı ama tekerleğin şekli aynı. Benim iş akışımda, tek sunuculuk işleri acme.sh ile, Kubernetes tarafını ise cert-manager ile kurmak çoğu zaman en rahat olanı oldu. Önemli olan, istemcinin hem challenge türünü esnek seçebilmesi, hem de hata mesajlarını anlaşılır yazması. Hatalar anlaşılırsa, çözüm de hızlı geliyor.

DNS otomasyonu kurarken güvenliğin ritmi

DNS‑01 için sağlayıcınızın API anahtarlarını uygulamaya veriyorsunuz. Bu anahtarları dar yetkilerle oluşturmak güzel bir alışkanlık. Sadece TXT yazabilsin, sadece ilgili alan adlarında çalışsın, mümkünse ayrı bir kullanıcı olsun. Yenilemelerin gece saatlerine denk geldiğini unutmayın; o saatlerde beklenmedik bir güvenlik duvarı kuralı veya iki faktör sürprizi çıkmasın.

HTTP‑01’de .well-known yolunu gözden kaçırmamak

Altyapınızda birden fazla ters vekil, birden fazla katman varsa, .well-known/acme-challenge yolunun gerçekten uygulamaya ulaştığını test etmek çok iş kazasını engeller. Basit bir metin dosyası koyup tarayıcıdan görebiliyor musunuz, küçük bir kontrol. CDN kullanıyorsanız, bu yola özel önbelleği kapatmak, doğrulama anında doğru içeriğin görüleceğini garantiler.

TLS‑ALPN‑01’de SNI ve geçici sertifika trafiği

Bu yöntemde, el sıkışma anında doğru alan adıyla (SNI) gelen isteğe, o ana özel üretilmiş geçici sertifikayla yanıt verirsiniz. Bazen tek bir giriş noktasında onlarca alan adı hizmet verdiği için, SNI yönlendirmesinin isabetli olması kritik. Küçük bir ipucu: Doğrulama sırasında log’ları geçici olarak daha detaylı açıp, el sıkışmanın gerçekten beklediğiniz yere geldiğini görmek çok işe yarıyor.

Oran limitleri, küçük molalar ve alternatif plan

ACME tarafında, kısa sürede çok deneme yaparsanız oran limitlerine takılabilirsiniz. Panik yapmayın; genelde sorun, yanlış challenge türünde ısrar etmekten ya da önbelleğe takılan bir doğrulama içeriğinden doğar. Ben böyle durumlarda, önce bir nefes alıp log’ları yalınlaştırıyorum, sonra adım adım ilerliyorum. Gerekirse farklı bir challenge’la ikinci bir şans vermek, çoğu kez süreci rahatlatır. Kaynak isteyenler için, Let’s Encrypt’in challenge türleri rehberi pratik notlarıyla iyi bir referans.

Kapanış: Doğru anahtar yan cebinde

Toparlayalım. HTTP‑01, dosyayı kapıya asıp “bak buradayım” demektir; hızlıdır, basittir ve doğru koşullarda neredeyse zahmetsizdir. DNS‑01, alan adının kalbine küçük bir not bırakır; wildcard gibi geniş kapsamlı işlerde ve kapalı kapılarda parıldar. TLS‑ALPN‑01 ise 443 üzerindeki özel tokalaşmayla, güvenlik hassasiyeti yüksek ortamlarda zarif bir çözüm sunar. Her birinin güçlü anları ve “aman dikkat” köşeleri var. Önemli olan, projenin ritmini dinleyip, en az sürtünme çıkaracak yolu seçmek.

Pratik bir tavsiye: Küçük ve düz bir sitede, port 80 açıksa, HTTP‑01 ile başlayın. CDN, wildcard veya çok kiracılı bir yapı varsa, DNS‑01’i elinize alın. Port 80’i açamıyorsanız ve proxy düzeniniz buna izin veriyorsa, TLS‑ALPN‑01 tatlı bir alternatif olur. Otomatize ederken, log’ları okunur kılın, hata mesajlarını not edin, bir kez sorunsuz akmaya başladı mı, yıllarca sessiz çalışır. Daha teknik ayrıntı isteyenler, ACME standardının resmi metnini ve TLS‑ALPN‑01’in açıklamasını kaynak olarak saklayabilir. Umarım bu yazı, bir sonraki sertifika yenilemenizde size küçük bir köşe lambası olur. Sorunuz olursa çekinmeden yazın; bir sonraki kahveyi birlikte içeriz.

Sıkça Sorulan Sorular

Wildcard için en rahat ve yaygın yol DNS‑01. Çünkü kanıtlama DNS kayıtlarıyla yapılıyor ve tek bir doğrulamayla tüm alt alan adlarını kapsayabiliyorsun.

CDN’de .well-known yolunu düzgün iletmek bazen zor oluyor. Böyle durumlarda DNS‑01’le doğrulamak daha pürüzsüz ilerliyor. Gerekirse doğrulama anında önbelleği kapatmayı da dene.

Evet, mümkün. TLS‑ALPN‑01 tam bu durumda işe yarıyor. Yalnız doğrulama trafiğinin 443’te doğru uygulamaya ulaşabildiğinden ve proxy katmanının el sıkışmayı engellemediğinden emin olmalısın.