SSL/TLS: Let's Encrypt ile Ücretsiz HTTPS
SSL/TLS Nedir ve Neden Önemlidir?
SSL (Secure Sockets Layer) ve onun modern halefi TLS (Transport Layer Security), internet üzerindeki iletişimi şifreleyen kriptografik protokollerdir. Bir web sitesi HTTPS kullandığında, kullanıcı ile sunucu arasındaki tüm veri trafiği şifrelenir. Bu sayede kredi kartı bilgileri, şifreler ve kişisel veriler üçüncü taraflarca okunamaz hale gelir.
Günümüzde HTTPS kullanmak artık bir lüks değil, zorunluluktur. Google, HTTPS kullanmayan siteleri arama sonuçlarında geri sıraya atar ve Chrome tarayıcısı bu siteleri "Güvenli Değil" olarak işaretler. Ayrıca HTTP/2, Service Workers ve birçok modern web API'si yalnızca HTTPS üzerinde çalışır.
Let's Encrypt Nedir?
Let's Encrypt, Internet Security Research Group (ISRG) tarafından yönetilen, ücretsiz, otomatik ve açık bir sertifika otoritesidir (CA). 2015 yılında hizmete giren Let's Encrypt, SSL/TLS sertifikalarını tamamen ücretsiz olarak sunarak web'in daha güvenli hale gelmesine büyük katkı sağlamıştır. Bugün milyarlarca web sitesi Let's Encrypt sertifikası kullanmaktadır.
Let's Encrypt sertifikalarının temel özellikleri şunlardır:
- Ücretsiz: Hiçbir ücret ödemenize gerek yoktur.
- Otomatik: ACME protokolü sayesinde sertifika alma ve yenileme işlemleri otomatikleştirilebilir.
- 90 günlük geçerlilik: Sertifikalar 90 gün geçerlidir ve otomatik yenileme ile sürekli aktif tutulur.
- Domain Validation (DV): Alan adı sahipliğini doğrulayarak sertifika verir.
- Wildcard desteği: DNS-01 doğrulama ile wildcard sertifikalar alınabilir.
Certbot Kurulumu
Certbot, Let's Encrypt sertifikalarını almak ve yönetmek için kullanılan en popüler ACME istemcisidir. Electronic Frontier Foundation (EFF) tarafından geliştirilmektedir.
Ubuntu/Debian Üzerinde Kurulum
sudo apt update
sudo apt install certbot
Eğer Nginx kullanıyorsanız, Nginx eklentisini de kurun:
sudo apt install python3-certbot-nginx
Apache için ise:
sudo apt install python3-certbot-apache
CentOS/RHEL Üzerinde Kurulum
sudo dnf install epel-release
sudo dnf install certbot python3-certbot-nginx
Sertifika Alma İşlemi
Nginx ile Otomatik Yapılandırma
Certbot, Nginx yapılandırmanızı otomatik olarak güncelleyebilir. Bu en kolay yöntemdir:
sudo certbot --nginx -d example.com -d www.example.com
Bu komut şunları yapar:
- Alan adınızın sahipliğini HTTP-01 challenge ile doğrular
- Sertifikayı alır ve
/etc/letsencrypt/live/example.com/dizinine kaydeder - Nginx yapılandırmasını otomatik olarak HTTPS'e göre düzenler
- HTTP'den HTTPS'e yönlendirme kuralı ekler
Standalone Mod
Eğer bir web sunucusu çalışmıyorsa veya manuel kontrol istiyorsanız standalone modunu kullanabilirsiniz:
sudo certbot certonly --standalone -d example.com -d www.example.com
Bu mod, Certbot'un kendi geçici web sunucusunu 80 portunda başlatmasını gerektirir. Bu yüzden mevcut web sunucunuzu geçici olarak durdurmanız gerekir.
Webroot Modu
Çalışan web sunucunuzu durdurmadan sertifika almak için webroot modunu tercih edebilirsiniz:
sudo certbot certonly --webroot -w /var/www/html -d example.com -d www.example.com
Wildcard Sertifika Alma
Tüm alt alan adlarını kapsayan wildcard sertifika almak için DNS-01 doğrulaması gerekir:
sudo certbot certonly --manual --preferred-challenges dns -d "*.example.com" -d example.com
Bu yöntemde Certbot size bir DNS TXT kaydı eklemenizi isteyecektir. _acme-challenge.example.com adında bir TXT kaydı oluşturmanız gerekir.
Nginx HTTPS Yapılandırması
Certbot otomatik yapılandırma yapmasına rağmen, yapılandırmayı anlamak ve optimize etmek önemlidir. Aşağıda güçlü bir Nginx HTTPS yapılandırması örneği bulunmaktadır:
server {
listen 80;
server_name example.com www.example.com;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl http2;
server_name example.com www.example.com;
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
# SSL Optimizasyonlari
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384;
ssl_prefer_server_ciphers off;
# HSTS (HTTP Strict Transport Security)
add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload" always;
# OCSP Stapling
ssl_stapling on;
ssl_stapling_verify on;
ssl_trusted_certificate /etc/letsencrypt/live/example.com/chain.pem;
resolver 8.8.8.8 8.8.4.4 valid=300s;
# SSL Oturum Onbellegi
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 1d;
ssl_session_tickets off;
root /var/www/html;
index index.html;
}
Otomatik Yenileme
Let's Encrypt sertifikaları 90 gün geçerlidir. Certbot kurulduğunda genellikle otomatik yenileme için bir systemd timer veya cron görevi oluşturur. Durumu kontrol etmek için:
sudo systemctl status certbot.timer
Manuel olarak yenileme testini çalıştırmak için:
sudo certbot renew --dry-run
Eğer otomatik yenileme yapılandırılmamışsa, bir cron görevi ekleyebilirsiniz:
sudo crontab -e
# Asagidaki satiri ekleyin:
0 3 * * * certbot renew --quiet --post-hook "systemctl reload nginx"
Bu yapılandırma her gün saat 03:00'te sertifika yenileme kontrolü yapar. --post-hook parametresi, yenileme başarılı olduğunda Nginx'i yeniden yükler.
Sertifika Durumunu Kontrol Etme
Mevcut sertifikalarınızı listelemek ve durumlarını görmek için:
sudo certbot certificates
Bir sitenin SSL yapılandırmasını komut satırından test etmek için OpenSSL kullanabilirsiniz:
openssl s_client -connect example.com:443 -servername example.com 2>/dev/null | openssl x509 -noout -dates -subject
Yaygın Sorunlar ve Çözümleri
Port 80 Erişim Sorunu
HTTP-01 doğrulaması için Let's Encrypt sunucularının sitenizin 80 portuna erişebilmesi gerekir. Güvenlik duvarınızda bu portu açtığınızdan emin olun:
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
Rate Limit Aşımı
Let's Encrypt, kötüye kullanımı önlemek için hız sınırlamaları uygular. Aynı alan adı için haftada en fazla 5 sertifika alabilirsiniz. Test aşamasında staging ortamını kullanmanız şiddetle önerilir:
sudo certbot certonly --staging --nginx -d example.com
DNS Yayılım Gecikmesi
Wildcard sertifika alırken DNS-01 doğrulaması kullanılır. DNS kayıtlarının yayılması zaman alabilir. TXT kaydını ekledikten sonra doğrulamadan önce yayılımı kontrol edin:
dig -t TXT _acme-challenge.example.com
Docker ile Let's Encrypt
Konteynerize ortamlarda sertifika yönetimi için Certbot'u Docker ile de kullanabilirsiniz:
docker run -it --rm \
-v /etc/letsencrypt:/etc/letsencrypt \
-v /var/lib/letsencrypt:/var/lib/letsencrypt \
-p 80:80 \
certbot/certbot certonly --standalone -d example.com
Alternatif olarak, Traefik veya Caddy gibi modern reverse proxy'ler yerleşik Let's Encrypt desteği sunar ve sertifika yönetimini tamamen otomatikleştirir.
Güvenlik İpuçları
- TLS 1.0 ve 1.1'i devre dışı bırakın: Yalnızca TLS 1.2 ve TLS 1.3 kullanın.
- HSTS başlığını etkinleştirin: Tarayıcıların sitenize yalnızca HTTPS üzerinden bağlanmasını zorunlu kılar.
- OCSP Stapling kullanın: Sertifika doğrulama süresini kısaltır ve gizliliği artırır.
- SSL Labs ile test edin: Yapılandırmanızı SSL Labs SSL Test aracıyla kontrol edin ve A+ notu hedefleyin.
- Özel anahtarları koruyun:
/etc/letsencrypt/dizininin izinlerinin doğru olduğundan emin olun; özel anahtarlar yalnızca root tarafından okunabilir olmalıdır. - CAA kaydı ekleyin: DNS'inize CAA kaydı ekleyerek yalnızca belirli sertifika otoritelerinin alan adınız için sertifika vermesine izin verin.
# DNS CAA kaydi ornegi
example.com. IN CAA 0 issue "letsencrypt.org"
Sonuç
Let's Encrypt, web güvenliğini demokratikleştiren devrim niteliğinde bir projedir. Certbot gibi araçlar sayesinde birkaç dakika içinde ücretsiz SSL/TLS sertifikası alabilir ve sitenizi HTTPS ile güvence altına alabilirsiniz. Otomatik yenileme mekanizması sayesinde sertifika süresi dolma endişesi yaşamadan güvenli bir web deneyimi sunabilirsiniz. Artık HTTPS kullanmamak için hiçbir mazeret kalmamıştır.