Ters proxy olarak yapılandırıldığında Caddy, Let's Encrypt veya ZeroSSL gibi ACME sağlayıcılarını kullanarak alan adlarınız için TLS sertifikalarını otomatik olarak alır, yeniler ve yönetir; böylece HTTPS elle müdahale olmadan varsayılan olarak etkinleşir. Bu özellik, elle sertifika yönetimi işlerini ortadan kaldırarak güvenli web sunucusu kurulumunu basitleştirir.
Caddy'nin otomatik HTTPS özelliğini anlamak
Caddy'nin temel farkı, HTTPS'e sıfır yapılandırmayla yaklaşmasıdır. Caddy bir alan adı için istek aldığında, o alan adına ait geçerli bir sertifika yoksa ve açıkça yapılandırılmamışsa sertifikayı almaya çalışır. Bu süreç ACME (Automatic Certificate Management Environment) protokolünü kullanır.
ACME ile Caddy nasıl etkileşir
- Alan adı çözümleme: Caddy, gelen istekle ilişkili alan adını belirler.
- Sertifika kontrolü: o alan adı için geçerli ve mevcut bir sertifika olup olmadığını yerel deposunda kontrol eder.
- ACME doğrulaması: geçerli bir sertifika bulunamazsa Caddy, yapılandırılmış ACME sağlayıcısıyla (varsayılan Let's Encrypt, yedek olarak ZeroSSL) bir ACME doğrulaması başlatır. En yaygın doğrulama türleri HTTP-01 ve DNS-01'dir.
- HTTP-01 doğrulaması: Caddy, sunucuda belirli bir yolda (
/.well-known/acme-challenge/) geçici bir dosya oluşturur. ACME sağlayıcısı daha sonra alan adı sahipliğini doğrulamak için bu dosyaya 80 numaralı port üzerinden HTTP ile erişmeye çalışır. Bu, Caddy'nin 80 numaralı portta herkese açık erişilebilir olmasını gerektirir. - DNS-01 doğrulaması: Caddy, ACME sağlayıcısına alan adının DNS bölgesindeki belirli bir TXT kaydını kontrol ederek sahipliği doğrulamasını söyler. Bu yöntem wildcard sertifikalar için zorunludur ve 80 numaralı port kullanılamadığında da işe yarar. Caddy'nin desteklenen bir DNS sağlayıcısına ait kimlik bilgilerine sahip olmasını gerektirir.
- HTTP-01 doğrulaması: Caddy, sunucuda belirli bir yolda (
- Sertifika verilmesi: doğrulama başarıyla tamamlandığında ACME sağlayıcısı alan adı için bir TLS sertifikası verir.
- Sertifika depolama: Caddy, sertifikayı ve özel anahtarını disk üzerinde güvenli biçimde saklar.
- Otomatik yenileme: Caddy sertifikaların son kullanma tarihlerini izler ve aynı ACME doğrulama sürecini kullanarak bunları çok önceden (genellikle son kullanma tarihinden 30 gün önce) otomatik olarak yeniler.
- OCSP Stapling: Caddy ayrıca OCSP yanıtlarını otomatik olarak alıp sertifikalara ekler; böylece istemciler sertifika iptal durumunu doğrudan Sertifika Otoritesi'ne bağlanmadan doğrulayabilir, bu da istemci performansını ve gizliliğini artırır.
Otomatik HTTPS ile temel ters proxy yapılandırması
Ters proxy için asgari bir Caddyfile yapılandırması, otomatik HTTPS'i dolaylı olarak etkinleştirir.
Basit ters proxy örneği
yourdomain.com {
reverse_proxy localhost:8080
}
Bu örnekte:
* yourdomain.com: bu, site etiketidir. Caddy bu alan adına gelen istekleri hem 80 numaralı portta (HTTP yönlendirmeleri ve ACME doğrulamaları için) hem de 443'te (HTTPS için) dinler.
* reverse_proxy localhost:8080: bu yönerge, yourdomain.com için gelen tüm istekleri localhost üzerinde 8080 portunda çalışan upstream uygulamaya iletir.
Caddy bu yapılandırmayla başlatıldığında aşağıdaki adımları otomatik olarak gerçekleştirir:
1. Bir ACME sağlayıcısından yourdomain.com için TLS sertifikası almayı dener.
2. 80 numaralı porttaki tüm trafik için HTTP'den HTTPS'e yönlendirme kurar.
3. Alınan sertifikayı kullanarak yourdomain.com alan adını HTTPS üzerinden sunar.
Caddy'yi çalıştırma
Caddy'yi bu yapılandırmayla çalıştırmak için:
- Yukarıdaki içeriği istediğiniz dizine
Caddyfileadıyla kaydedin. - Terminalde o dizine gidin.
- Şu komutu çalıştırın:
caddy run
Üretim ortamlarında Caddy'yi bir systemd servisi olarak ya da Docker konteyneri içinde çalıştırmanız önerilir.
Gelişmiş HTTPS yapılandırmaları
Özel sertifikalar
Elinizde hazır TLS sertifikaları varsa (örneğin kurumsal bir CA'dan alınmış ya da elle edinilmiş wildcard sertifikalar), Caddy otomatik sertifika almak yerine bunları kullanacak şekilde yapılandırılabilir.
yourdomain.com {
tls /path/to/your/cert.pem /path/to/your/key.pem
reverse_proxy localhost:8080
}
tls /path/to/your/cert.pem /path/to/your/key.pem: tam zincir sertifika dosyasını ve özel anahtar dosyasını belirtir. Caddy bu dosyaları kullanır veyourdomain.comiçin sertifika almaya çalışmaz.
DNS-01 doğrulamasıyla wildcard sertifikalar
Wildcard sertifikalar (*.yourdomain.com) DNS-01 ACME doğrulamasını gerektirir, çünkü HTTP-01 doğrulaması rastgele alt alan adlarının sahipliğini kanıtlayamaz. Bu nedenle Caddy'nin DNS sağlayıcınıza ait kimlik bilgileriyle yapılandırılması gerekir.
*.yourdomain.com {
tls {
dns cloudflare {
api_token "YOUR_CLOUDFLARE_API_TOKEN"
}
}
reverse_proxy localhost:8080
}
tls { dns cloudflare { ... } }: bu blok Caddy'ye DNS-01 doğrulamasını Cloudflare DNS sağlayıcısıyla kullanmasını söyler.api_token "YOUR_CLOUDFLARE_API_TOKEN": bunu gerçek Cloudflare API token'ınızla değiştirin. Caddy, eklentiler aracılığıyla çok sayıda DNS sağlayıcısını destekler. Sağlayıcıya özel yapılandırmalar için Caddy belgelerine bakın.
Birden fazla alan adı ve site blokları
Caddy, her biri kendi otomatik HTTPS'ine sahip birden fazla alan adını sunabilir.
yourdomain.com {
reverse_proxy localhost:8080
}
anotherdomain.org {
reverse_proxy localhost:8081
}
Caddy, hem yourdomain.com hem de anotherdomain.org için sertifikaları birbirinden bağımsız olarak alır ve yönetir.
HTTP-01 ve DNS-01 doğrulamalarının karşılaştırması
| Özellik | HTTP-01 doğrulaması | DNS-01 doğrulaması |
|---|---|---|
| Doğrulama yöntemi | 80 numaralı portta dosya sunmak | DNS'e TXT kaydı eklemek |
| Gerekli port | 80 (ACME doğrulaması için) | Belirli bir port yok, yalnızca DNS erişimi |
| Wildcard desteği | Hayır | Evet (*.yourdomain.com) |
| Dahili sunucular | Caddy herkese açık erişilebilir değilse uygun değil | DNS yönetilebiliyorsa dahili sunucular için uygun |
| Yapılandırma | Genellikle otomatik, ek yapılandırma gerekmez | DNS sağlayıcı kimlik bilgileri ve eklenti gerektirir |
| Güvenlik duvarı ihtiyaçları | 80 numaralı port internete açık olmalı | Doğrulama için Caddy sunucusunda gelen port gerekmez |
ACME sağlayıcıları
Caddy sertifika alımı için varsayılan olarak Let's Encrypt kullanır. ZeroSSL yedek olarak devreye girer. Hangi ACME sağlayıcısının kullanılacağını açıkça yapılandırabilirsiniz.
yourdomain.com {
tls [email protected] {
ca https://acme-v02.api.letsencrypt.org/directory
}
reverse_proxy localhost:8080
}
ca https://acme-v02.api.letsencrypt.org/directory: ACME CA URL'sini belirtir.[email protected]: ACME hesabı kaydı ve CA'dan gelecek önemli bildirimler için bir e-posta adresi vermeniz önerilir.
Sertifikaları yönetme
Caddy sertifikaları otomatik yönetir, ancak depolama biçimini ve elle müdahale seçeneklerini bilmek işinize yarayabilir.
Sertifika depolama
Caddy varsayılan olarak sertifikaları, özel anahtarları ve ACME hesap bilgilerini bir veri dizininde saklar. Tam konum, işletim sistemine ve Caddy'nin nasıl çalıştırıldığına bağlıdır:
* Linux: /var/lib/caddy/.local/share/caddy (systemd üzerinden root olarak çalıştırıldığında) veya $HOME/.local/share/caddy (kullanıcı olarak çalıştırıldığında).
* Docker: konteynerin /data birimi içinde.
Her yeniden başlatmada sertifikaların yeniden alınmasını önlemek için bu dizin kalıcı olmalıdır (örneğin Docker'da bağlanmış bir birim).
Elle yenileme ve iptal
Caddy yenilemeyi otomatikleştirse de sertifika deposuyla doğrudan uğraşmanız nadiren gerekir.
* Yenileme: anında yenileme gerekiyorsa (örneğin bir sertifika ele geçirildiyse), ilgili sertifika dosyalarını Caddy'nin veri dizininden silebilirsiniz. Caddy bir sonraki başlatmada veya istekte yenisini almayı dener.
* İptal: sertifika iptali ileri düzey bir işlemdir ve genellikle özel anahtar ele geçirildiğinde yapılır. Caddy iptal için doğrudan bir komut satırı aracı sunmaz. Bu işlem gerektiğinde genellikle ACME sağlayıcısının API'si veya özel bir istemci üzerinden yapılır.
Yaygın HTTPS sorunlarını giderme
Güvenlik duvarı yapılandırması
Caddy sunucunuzda 80 ve 443 numaralı portların gelen trafiğe açık olduğundan emin olun. 80 numaralı port, HTTP-01 ACME doğrulaması ve HTTP'den HTTPS'e yönlendirmeler için kritiktir.
DNS yayılımı
DNS-01 doğrulamasını kullanıyorsanız, DNS kayıtlarınızın (özellikle doğrulamaya ait TXT kaydının) doğru şekilde yayıldığını doğrulayın. dig gibi araçları veya çevrimiçi DNS sorgulama servislerini kullanın. Hatalı veya yavaş DNS yayılımı sertifikanın verilmesini engelleyebilir.
ACME hız limitleri
Let's Encrypt gibi ACME sağlayıcılarının sertifika verme konusunda hız limitleri vardır. Art arda başarısız denemeler geçici engellemelere yol açabilir.
* Staging ortamı: üretim limitlerine takılmamak için testlerde ACME staging ortamını kullanın.
caddyfile
yourdomain.com {
tls [email protected] {
ca https://acme-staging-v02.api.letsencrypt.org/directory
}
reverse_proxy localhost:8080
}
* Alan adlarını birleştirin: çok sayıda alt alan adı sunuyorsanız, tekil sertifika isteklerinin sayısını azaltmak için wildcard sertifikayı değerlendirin.
Caddy günlükleri
Caddy günlükleri sertifika alma denemeleri, yenilemeler ve hatalar hakkında ayrıntılı bilgi verir. HTTPS beklendiği gibi çalışmıyorsa, günlüklerde ilgili hata mesajlarını kontrol edin.
* Varsayılan günlük konumu: günlükler genellikle standart çıktıya (stdout) veya yapılandırılmış bir günlük dosyasına yazılır.
* Ayrıntılı günlükleme: daha fazla tanı bilgisi için günlük ayrıntı düzeyini artırabilirsiniz.
{
log {
output file /var/log/caddy/caddy.log
level DEBUG
}
}
yourdomain.com {
reverse_proxy localhost:8080
}
Dağıtım ile ilgili hususlar
Docker
Caddy'yi Docker'da dağıtırken veri dizininin kalıcı bir birime eşlendiğinden emin olun.
version: '3.8'
services:
caddy:
image: caddy:latest
restart: unless-stopped
ports:
- "80:80"
- "443:443"
volumes:
- ./Caddyfile:/etc/caddy/Caddyfile
- caddy_data:/data # Sertifikalar için kalıcı depolama
- caddy_config:/config
myapp:
image: myapp:latest
restart: unless-stopped
expose:
- "8080" # Dahili port, dışarıya açılmaz
volumes:
caddy_data:
caddy_config:
Systemd servisi
Fiziksel sunucu veya sanal makine dağıtımlarında Caddy'yi systemd servisi olarak çalıştırmak standart uygulamadır. Resmî Caddy belgeleri, Caddy'yi ayrı bir kullanıcı olarak çalıştıracak ve veri dizinini doğru yönetecek örnek caddy.service dosyaları sunar.
Kaynak kullanımı
Caddy hafiftir. Sertifika yönetimi işlemleri çok az kaynak tüketir ve genellikle arka planda gerçekleşir. Asıl kaynak tüketimi trafiğin proxy'lenmesiyle ilgili olacaktır.
Güvenlik için en iyi uygulamalar
Caddy'nin otomatik HTTPS özelliği pek çok güvenlik konusunu varsayılan olarak halleder:
* Güçlü TLS şifre paketleri: Caddy modern ve güvenli TLS şifre paketleri kullanır.
* HTTP Strict Transport Security (HSTS): Caddy, tarayıcılara her zaman HTTPS ile bağlanmalarını söyleyen Strict-Transport-Security başlığını otomatik olarak ekleyebilir.
* OCSP Stapling: gecikmeyi azaltır ve gizliliği artırır.
Caddy TLS karmaşıklığının büyük bölümünü üstlense de genel güvenlik uygulamaları geçerliliğini korur:
* Caddy'yi güncel tutun: güvenlik yamalarından ve yeni özelliklerden yararlanmak için Caddy'yi düzenli olarak en son sürüme güncelleyin.
* En az yetki: Caddy'yi gereken en az izinle çalıştırın. Resmî systemd servis dosyaları Caddy'yi root olmayan bir kullanıcı olarak çalıştıracak şekilde yapılandırır.
* Güvenlik duvarı: upstream uygulamalarınıza (örneğin localhost:8080) erişimi kısıtlayın; yalnızca Caddy örneğinden erişilebilir olsunlar.
* Erişim denetimi: proxy arkasındaki belirli rotalar veya uygulamalar için gerekiyorsa ek erişim denetimi veya kimlik doğrulama uygulayın.
