Giriş
Günümüz internet dünyasında web sitelerinin güvenliği, kullanıcı verilerinin korunması ve arama motoru sıralamaları için kritik öneme sahiptir. HTTPS (Hypertext Transfer Protocol Secure), web siteniz ile ziyaretçiler arasında şifreli bir bağlantı kurarak bu güvenliği sağlar. Bu şifreleme, SSL/TLS sertifikaları aracılığıyla gerçekleştirilir. Geleneksel olarak pahalı ve kurulumu karmaşık olan bu sertifikaları ücretsiz ve kolayca edinmenizi sağlayan Let’s Encrypt, bu alanda devrim yaratmıştır.
Bu rehberde, yüksek performanslı ve popüler bir web sunucusu olan Nginx’i Rocky Linux 8 üzerinde Let’s Encrypt sertifikaları ile nasıl güvenli hale getireceğinizi adım adım öğreneceksiniz. Rocky Linux 8’in kararlılığı ve Nginx’in esnekliği ile Let’s Encrypt’in kullanım kolaylığını birleştirerek web sitenizi güvenli ve güncel tutmanın yollarını keşfedeceğiz.
Ön Koşullar
Bu rehbere başlamadan önce aşağıdaki ön koşulların yerine getirildiğinden emin olun:
- Rocky Linux 8 Sunucusu: SSH erişimine sahip, güncel bir Rocky Linux 8 sunucunuz olmalı.
- Sudo Yetkileri: Komutları çalıştırmak için
sudoyetkilerine sahip bir kullanıcı hesabına sahip olmalısınız. - Nginx Kurulumu: Nginx web sunucusu sunucunuzda kurulu ve çalışır durumda olmalı. Henüz kurulu değilse, sonraki adımda nasıl kurulacağını göstereceğiz.
- Alan Adı (Domain Name): Güvenli hale getirmek istediğiniz bir alan adınız olmalı (örn:
example.com). Bu alan adının DNS A/AAAA kaydının sunucunuzun IP adresini işaret ettiğinden emin olun. - Firewall Ayarları: Sunucunuzun güvenlik duvarında (firewall) HTTP (port 80) ve HTTPS (port 443) trafiğine izin verilmelidir.
Bu ön koşullar tamamlandığında, Nginx ve Let’s Encrypt entegrasyonuna geçmeye hazır olacaksınız.
Nginx Kurulumu ve Temel Yapılandırma
Eğer Nginx sunucunuzda zaten kurulu ve yapılandırılmışsa, bu adımı atlayabilirsiniz. Aksi takdirde, Nginx’i kurup basit bir web sitesi için yapılandıracağız.
Nginx Kurulumu
Öncelikle sistem paketlerini güncelleyelim ve Nginx’i kuralım:
sudo dnf update -y
sudo dnf install nginx -y
Nginx kurulduktan sonra, servisi başlatın ve sistem başlangıcında otomatik başlamasını sağlayın:
sudo systemctl start nginx
sudo systemctl enable nginx
sudo systemctl status nginx
systemctl status nginx komutu, Nginx’in aktif ve çalıştığını göstermelidir.
Firewall Yapılandırması
Rocky Linux’ta varsayılan olarak firewalld aktiftir. Nginx’in dışarıdan erişilebilir olması için HTTP ve HTTPS portlarını açmamız gerekiyor:
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https
sudo firewall-cmd --reload
Bu komutlar, 80 (HTTP) ve 443 (HTTPS) portlarına kalıcı olarak izin verir ve güvenlik duvarını yeniden yükler.
Nginx Sanal Host (Server Block) Yapılandırması
Şimdi, Let’s Encrypt sertifikası alacağımız alan adımız için temel bir Nginx yapılandırması oluşturalım. Örnek olarak example.com alan adını kullanacağız. Kendi alan adınızı buraya yazmayı unutmayın.
sudo nano /etc/nginx/conf.d/example.com.conf
Açılan dosyaya aşağıdaki içeriği yapıştırın:
server {
listen 80;
listen [::]:80;
server_name example.com www.example.com;
root /usr/share/nginx/html; # veya kendi web sitenizin yolu
index index.html index.htm;
location / {
try_files $uri $uri/ =404;
}
}
root dizinini kendi web sitenizin dosyalarının bulunduğu yola göre ayarlayabilirsiniz. Eğer sadece test ediyorsanız, varsayılan Nginx HTML dizini yeterlidir. Dosyayı kaydedip kapatın (Ctrl+X, Y, Enter).
Nginx yapılandırmasını test edin ve bir hata yoksa servisi yeniden başlatın:
sudo nginx -t
sudo systemctl restart nginx
Şimdi tarayıcınızdan alan adınıza (http://example.com) giderek Nginx’in çalıştığını doğrulayabilirsiniz. Henüz HTTPS üzerinden erişemeyeceksiniz, çünkü sertifikayı henüz almadık.
Certbot Kurulumu
Let’s Encrypt sertifikalarını almak ve yönetmek için EFF (Electronic Frontier Foundation) tarafından geliştirilen Certbot aracını kullanacağız. Certbot’u Rocky Linux 8’e kurmak için EPEL (Extra Packages for Enterprise Linux) deposunu etkinleştirmemiz gerekiyor.
EPEL Deposunu Etkinleştirme
sudo dnf install epel-release -y
Bu komut, Certbot gibi ek yazılımları barındıran EPEL deposunu sisteminize ekler.
Certbot ve Nginx Eklentisini Kurma
EPEL deposu etkinleştirildikten sonra Certbot’u ve Nginx ile entegrasyonu sağlayan eklentiyi kurabiliriz:
sudo dnf install certbot python3-certbot-nginx -y
python3-certbot-nginx paketi, Certbot’un Nginx yapılandırmasını otomatik olarak okumasını ve değiştirmesini sağlar. Bu, sertifika alma ve yenileme süreçlerini büyük ölçüde basitleştirir.
Let’s Encrypt SSL Sertifikası Alma
Certbot ve Nginx eklentisi kurulduktan sonra, SSL sertifikasını almak artık çok kolay. Certbot’un Nginx eklentisini kullanarak sertifika isteği göndereceğiz.
sudo certbot --nginx -d example.com -d www.example.com
Yukarıdaki komutta example.com ve www.example.com yerine kendi alan adlarınızı ve varsa alt alan adlarınızı eklemeyi unutmayın. Birden fazla alan adı için -d parametresini tekrarlayabilirsiniz.
Komutu çalıştırdıktan sonra Certbot size birkaç soru soracaktır:
- E-posta Adresi: Geçerli bir e-posta adresi girmeniz istenir. Bu adres, sertifika süresi dolduğunda veya önemli bildirimler için kullanılacaktır.
- Hizmet Şartlarını Kabul Etme: Let’s Encrypt’in hizmet şartlarını kabul etmeniz istenir.
- E-posta Paylaşımı: EFF ile e-posta adresinizi paylaşmak isteyip istemediğiniz sorulur. Bu isteğe bağlıdır.
- HTTP’den HTTPS’ye Yönlendirme: Certbot, HTTP trafiğini otomatik olarak HTTPS’ye yönlendirip yönlendirmeyeceğini soracaktır. 2: Redirect (Yönlendirme) seçeneğini seçmeniz şiddetle tavsiye edilir. Bu, tüm ziyaretçilerinizin güvenli bağlantı üzerinden web sitenize erişmesini sağlar.
Bu adımları tamamladıktan sonra Certbot, alan adlarınız için bir sertifika alacak, Nginx yapılandırmanızı otomatik olarak güncelleyecek ve HTTP trafiğini HTTPS’ye yönlendirecektir.
Başarılı bir kurulumun ardından aşağıdaki gibi bir çıktı görmelisiniz:
Congratulations! Your certificate and chain have been saved at:
/etc/letsencrypt/live/example.com/fullchain.pem
Your key file has been saved at:
/etc/letsencrypt/live/example.com/privkey.pem
...
IMPORTANT NOTES:
- Congratulations! Your certificate and chain have been saved at:
/etc/letsencrypt/live/example.com/fullchain.pem
Your key file has been saved at:
/etc/letsencrypt/live/example.com/privkey.pem
Your cert will expire on 2024-XX-XX. To obtain a new or tweaked
version of this certificate in the future, simply run certbot again.
To non-interactively renew all of your certificates, run "certbot renew"
- If you like Certbot, please consider supporting our work by:
Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate
Donating to EFF: https://eff.org/donate-le
Şimdi tarayıcınızdan alan adınıza (https://example.com) giderek bağlantının güvenli olup olmadığını kontrol edebilirsiniz. Tarayıcınızın adres çubuğunda bir kilit simgesi veya “Güvenli” yazısı görmelisiniz.
SSL Sertifikasının Otomatik Yenilenmesini Sağlama
Let’s Encrypt sertifikaları 90 gün geçerlidir. Bu, güvenlik için iyi bir uygulama olsa da, sertifikaları manuel olarak yenilemek pratik değildir. Neyse ki, Certbot bu süreci otomatikleştirir.
Certbot Otomatik Yenileme
Certbot, varsayılan olarak sisteminize bir systemd timer veya cron görevi ekler. Bu görev, sertifikalarınızın süresi dolmadan önce otomatik olarak yenilenmesini sağlar. Genellikle günde iki kez çalışır ve sertifikalarınızın süresinin dolmasına 30 gün kala yenileme işlemini tetikler.
Otomatik yenileme işleminin düzgün çalıştığını test etmek için aşağıdaki komutu kullanabilirsiniz:
sudo certbot renew --dry-run
Bu komut, sertifikaları gerçekten yenilemeden bir yenileme denemesi yapar. Herhangi bir hata mesajı almazsanız, otomatik yenileme mekanizması düzgün çalışıyor demektir. Çıktıda genellikle “The dry run was successful” (Deneme sürümü başarılı oldu) ifadesini görmelisiniz.
Eğer bir hata olursa, çıktıda sorunla ilgili bilgiler yer alacaktır. Bu genellikle Nginx yapılandırmasındaki bir sorun veya Certbot’un sunucuya erişememesi gibi nedenlerden kaynaklanır.
Certbot’un otomatik yenileme görevinin durumunu kontrol etmek için:
sudo systemctl status certbot-renew.timer
veya cron görevi olarak ayarlandıysa:
sudo cat /etc/cron.d/certbot
Genellikle Rocky Linux 8’de systemd timer kullanılır. Bu timer’ın aktif olduğunu ve düzgün bir şekilde çalıştığını doğrulamak önemlidir.
Sonuç ve Sıkça Sorulan Sorular
Bu rehberde, Rocky Linux 8 üzerinde Nginx web sunucunuzu Let’s Encrypt’in ücretsiz SSL/TLS sertifikaları ile nasıl güvenli hale getireceğinizi adım adım öğrendiniz. Nginx kurulumundan başlayarak, Certbot’u yüklemeye, sertifika almaya ve otomatik yenilemeyi yapılandırmaya kadar tüm süreci başarıyla tamamladınız. Artık web siteniz HTTPS üzerinden güvenli bir şekilde yayın yapıyor ve ziyaretçilerinizin verileri şifrelenmiş bir bağlantı üzerinden iletiliyor.
HTTPS’nin sadece güvenlik için değil, aynı zamanda arama motoru optimizasyonu (SEO) ve kullanıcı güveni açısından da ne kadar önemli olduğunu unutmayın. Web sitenizin performansını ve güvenilirliğini artırmak için düzenli olarak güncellemeleri kontrol etmeyi ve güvenlik en iyi uygulamalarını takip etmeyi sürdürün.
Sıkça Sorulan Sorular (SSS)
S1: Sertifikam neden otomatik olarak yenilenmiyor?
C1: Birkaç olası nedeni olabilir:
- Certbot Yenileme Görevi Çalışmıyor:
sudo systemctl status certbot-renew.timerkomutuyla Certbot’un yenileme zamanlayıcısının aktif olup olmadığını kontrol edin. - Nginx Yapılandırma Hatası: Certbot’un yenileme sırasında Nginx’i yeniden yüklemesi gerekebilir. Nginx yapılandırmanızda bir hata varsa, yenileme başarısız olabilir.
sudo nginx -tile kontrol edin. - Firewall Kısıtlamaları: Let’s Encrypt sunucularının doğrulama yapabilmesi için port 80 veya 443’ün açık olması gerekir. Firewall ayarlarınızı kontrol edin.
- DNS Sorunları: Alan adınızın hala sunucunuzun doğru IP adresine işaret ettiğinden emin olun.
- Logları Kontrol Edin: Sorun giderme için
/var/log/letsencrypt/dizinindeki log dosyalarını inceleyin.
S2: Birden fazla alan adı veya alt alan adı için tek bir sertifika alabilir miyim?
C2: Evet, Certbot ile tek bir sertifikaya birden fazla alan adı veya alt alan adı (SAN – Subject Alternative Name) ekleyebilirsiniz. Sertifika alırken -d parametresini tekrarlamanız yeterlidir:
sudo certbot --nginx -d example.com -d www.example.com -d blog.example.com
S3: Nginx yapılandırmamı Certbot’un otomatik yaptığı değişiklikler olmadan manuel olarak nasıl yaparım?
C3: Certbot’un Nginx eklentisini kullanmak yerine certonly komutunu kullanabilirsiniz:
sudo certbot certonly --nginx -d example.com -d www.example.com
Bu komut sadece sertifikaları alır ve Nginx yapılandırmanıza dokunmaz. Sertifika dosyaları /etc/letsencrypt/live/example.com/ dizinine kaydedilir. Daha sonra Nginx yapılandırma dosyanızı (/etc/nginx/conf.d/example.com.conf) manuel olarak düzenleyerek SSL ayarlarını eklemeniz gerekir. Örnek bir Nginx SSL yapılandırması:
server {
listen 443 ssl;
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_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
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:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384";
ssl_prefer_server_ciphers on;
root /usr/share/nginx/html;
index index.html;
location / {
try_files $uri $uri/ =404;
}
}
server {
listen 80;
server_name example.com www.example.com;
return 301 https://$host$request_uri;
}
S4: Wildcard sertifikaları Let’s Encrypt ile nasıl alırım?
C4: Wildcard sertifikalar (örn: *.example.com), DNS doğrulama yöntemi gerektirir. Certbot ile bunu yapmak için --dns-cloudflare (Cloudflare için) gibi belirli DNS eklentilerini veya genel --manual --preferred-challenges dns yöntemini kullanmanız gerekir. Bu, DNS sağlayıcınızın kontrol paneline bir TXT kaydı eklemenizi gerektirir ve otomatikleştirilmesi biraz daha karmaşıktır.
sudo certbot certonly --manual --preferred-challenges dns -d *.example.com -d example.com
Bu komut, DNS sağlayıcınıza eklemeniz gereken bir TXT kaydı bilgisi verecektir. Kaydı ekledikten sonra Certbot doğrulama işlemini tamamlar.
S5: Hata durumunda ne yapmalıyım?
C5:
- Hata Mesajını Okuyun: Certbot’un verdiği hata mesajları genellikle sorunun kökeni hakkında iyi ipuçları verir.
- Logları Kontrol Edin:
/var/log/letsencrypt/dizinindeki log dosyaları ayrıntılı hata bilgileri içerir. - Nginx Yapılandırmasını Test Edin:
sudo nginx -tkomutuyla Nginx yapılandırmanızda bir hata olup olmadığını kontrol edin. - Firewall ve DNS’i Kontrol Edin: Port 80 ve 443’ün açık olduğundan ve alan adınızın doğru IP adresine işaret ettiğinden emin olun.
- Certbot Forumları: Let’s Encrypt ve Certbot’un aktif topluluk forumları vardır. Hatanızı aratarak veya yeni bir soru sorarak yardım bulabilirsiniz.
