
Ücretsiz SSL sertifikası almak için en yaygın yöntem, Let's Encrypt sertifika otoritesini Certbot aracıyla kullanmaktır. Certbot, sertifikayı alır, Nginx yapılandırmanızı HTTPS'e göre düzenler ve süresi dolmadan otomatik olarak yeniler. Bu rehberde Ubuntu 22.04/24.04 ve AlmaLinux 9 üzerinde Certbot'u Nginx eklentisiyle kuruyor, otomatik yenilemeyi systemd zamanlayıcısıyla doğruluyor ve sık karşılaşılan hataların çözümlerini anlatıyoruz.
Let's Encrypt ve Certbot Nasıl Çalışır?
Let's Encrypt, alan adı doğrulamalı (DV) sertifikaları ücretsiz ve otomatik olarak veren bir sertifika otoritesidir. Sertifika verilmeden önce, alan adının gerçekten sizin kontrolünüzde olduğunu kanıtlamanız gerekir. Bu kanıt ACME protokolü üzerinden yapılır ve en yaygın iki doğrulama türü vardır:
- HTTP-01: Let's Encrypt, alan adınızın 80 numaralı portunda
/.well-known/acme-challenge/altında belirli bir dosyayı arar. Certbot'un Nginx eklentisi bu dosyayı geçici olarak kendisi yerleştirir. - DNS-01: Alan adınıza belirli bir TXT kaydı eklemeniz istenir. Joker (wildcard) sertifikalar yalnızca bu yöntemle alınabilir.
Certbot ise bu süreci sizin yerinize yürüten ACME istemcisidir. Let's Encrypt sertifikaları şu an 90 gün geçerlidir ve sektör genelinde sertifika ömürleri kısalmaya devam etmektedir. Bu yüzden elle yenileme yerine otomatik yenilemenin doğru çalıştığından emin olmak, kurulumun en önemli parçasıdır.
Kurulum Öncesi Kontrol Listesi
Certbot hatalarının büyük bölümü kurulumdan önceki eksiklerden kaynaklanır. Başlamadan şunları doğrulayın:
- DNS kaydı: Alan adınızın ve varsa www alt alan adının A kaydı sunucu IP'nizi göstermeli. DNS sorgulama aracı ile kontrol edebilirsiniz.
- AAAA kaydı: Alan adında bir IPv6 (AAAA) kaydı varsa, o adres de bu sunucuya ait olmalı ve Nginx IPv6'yı dinlemelidir. Let's Encrypt IPv6'yı tercih eder; eski bir sunucuyu gösteren AAAA kaydı, doğrulamanın başarısız olmasının en sinsi sebeplerinden biridir.
- Port 80 açık olmalı: HTTPS kullanacak olsanız bile HTTP-01 doğrulaması için 80 numaralı port dışarıdan erişilebilir olmalıdır. Port kontrol aracı ile test edin.
- Nginx server block'u hazır olmalı: Certbot, hangi dosyayı düzenleyeceğini
server_namesatırına bakarak bulur. Server block oluşturmadıysanız önce Nginx kurulum rehberimizi izleyin.
Certbot Kurulumu
Ubuntu 22.04 ve 24.04
Ubuntu'da iki yöntem vardır. En basit yöntem, Ubuntu deposundaki paketi kurmaktır:
sudo apt update
sudo apt install certbot python3-certbot-nginx
Certbot geliştiricileri ise her zaman en güncel sürümü almak için snap paketini önerir. Bu yöntemi seçerseniz apt ile kurulmuş certbot paketini önce kaldırın; ikisini birlikte kullanmayın:
sudo apt remove certbot
sudo snap install --classic certbot
sudo ln -s /snap/bin/certbot /usr/bin/certbot
İki yöntem de çalışır; farkı, otomatik yenilemeyi yürüten zamanlayıcının adında göreceğiz.
AlmaLinux 9
AlmaLinux'ta Certbot, EPEL deposunda bulunur. Önce EPEL'i etkinleştirin, ardından Certbot'u ve Nginx eklentisini kurun:
sudo dnf install epel-release
sudo dnf install certbot python3-certbot-nginx
Güvenlik duvarında HTTP ve HTTPS servislerinin açık olduğundan emin olun:
sudo firewall-cmd --permanent --add-service=http --add-service=https
sudo firewall-cmd --reload
Nginx Eklentisi ile SSL Sertifikası Alma
Kurulum tamamlandıktan sonra sertifikayı tek komutla alabilirsiniz. Her alan adı için ayrı bir -d parametresi verin:
sudo certbot --nginx -d ornek.com -d www.ornek.com
İlk çalıştırmada Certbot sizden üç şey ister: hesap kurtarma ve önemli duyurular için bir e-posta adresi, kullanım koşullarını kabul etmeniz ve isteğe bağlı olarak e-posta listesine katılım. Ardından doğrulama yapılır, sertifika alınır ve server block'unuza şu satırlar eklenir:
listen 443 ssl; # managed by Certbot
ssl_certificate /etc/letsencrypt/live/ornek.com/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/ornek.com/privkey.pem; # managed by Certbot
include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
Certbot sürümüne bağlı olarak HTTP'den HTTPS'e yönlendirme ya size sorulur ya da varsayılan olarak eklenir. Yönlendirmeyi açıkça istemek için komuta --redirect parametresini ekleyebilirsiniz. İşlem bittikten sonra Nginx otomatik olarak yeniden yüklenir.
Yalnızca Sertifika Almak
Certbot'un Nginx dosyalarınıza dokunmasını istemiyorsanız certonly kullanın. Sertifika alınır, yapılandırmayı ise siz yaparsınız:
sudo certbot certonly --nginx -d ornek.com -d www.ornek.com
Webroot Yöntemi
Nginx eklentisinin yapılandırmanıza müdahale etmesini hiç istemediğiniz durumlarda, örneğin sunucuda karmaşık bir ters vekil yapısı varsa, webroot yöntemini kullanabilirsiniz. Bu yöntemde Certbot doğrulama dosyasını belirttiğiniz kök dizine yazar ve Nginx bu dosyayı normal bir statik dosya gibi sunar:
sudo certbot certonly --webroot -w /var/www/ornek.com/html -d ornek.com -d www.ornek.com
Webroot yöntemi yenilemede de aynı dizini kullanır. Sertifikayı Nginx'e kendiniz eklemeniz ve yenilemeden sonra Nginx'i yeniden yüklemek için bir deploy hook tanımlamanız gerekir; bunun nasıl yapılacağını aşağıda anlatıyoruz.
HTTPS Sonrası Önerilen Nginx Ayarları
Sertifika kurulduktan sonra birkaç ek ayarla hem güvenliği hem de performansı artırabilirsiniz:
- HTTP/2: Ubuntu 22.04 ve 24.04 depolarındaki Nginx sürümlerinde HTTP/2,
listen 443 ssl http2;şeklinde etkinleştirilir. Nginx 1.25.1 ve sonrasında ise ayrı birhttp2 on;yönergesi kullanılır. Sürümünüzünginx -vile kontrol edin. - HSTS: Tarayıcılara sitenize yalnızca HTTPS ile bağlanmalarını söyleyen başlıktır:
add_header Strict-Transport-Security "max-age=31536000" always;. Bu başlığı ancak tüm alt alan adlarınızın HTTPS ile çalıştığından emin olduktan sonra ekleyin; tarayıcılar bu bilgiyi belirtilen süre boyunca hatırlar ve geri almak zordur. İlk denemede kısa bir süreyle başlamak güvenlidir. - Karışık içerik: HTTPS sayfasında
http://ile yüklenen resim veya betikler tarayıcıda uyarıya ya da engellemeye neden olur. Uygulamanızın site adresini https olarak güncelleyin.
Her değişiklikten sonra sudo nginx -t ve sudo systemctl reload nginx komutlarını çalıştırmayı unutmayın.
Sertifika Dosyaları Nerede Tutulur?
| Yol | İçerik |
|---|---|
| /etc/letsencrypt/live/ornek.com/fullchain.pem | Sertifika ve ara sertifika zinciri (Nginx'te ssl_certificate) |
| /etc/letsencrypt/live/ornek.com/privkey.pem | Özel anahtar (ssl_certificate_key), kimseyle paylaşmayın |
| /etc/letsencrypt/renewal/ornek.com.conf | Bu sertifikanın yenileme ayarları |
| /etc/letsencrypt/archive/ornek.com/ | Sertifikanın tüm sürümleri; live dizinindeki dosyalar bunlara bağlantıdır |
| /var/log/letsencrypt/letsencrypt.log | Certbot günlükleri, hata ayıklarken ilk bakılacak yer |
Sunucu taşırken veya yedek alırken tüm /etc/letsencrypt dizinini birlikte taşıyın. live dizinindeki bağlantılar archive dizinine işaret ettiği için tek tek dosya kopyalamak yenilemeyi bozar.
Otomatik Yenilemeyi Doğrulama
Certbot, süresinin dolmasına 30 günden az kalan sertifikaları yeniler. Bu işlemi her gün iki kez çalışan bir systemd zamanlayıcısı tetikler. Zamanlayıcının adı kurulum yöntemine göre değişir:
| Kurulum yöntemi | Zamanlayıcı adı | Varsayılan durum |
|---|---|---|
| Ubuntu, apt paketi | certbot.timer | Kurulumla etkin gelir |
| Ubuntu, snap paketi | snap.certbot.renew.timer | Kurulumla etkin gelir |
| AlmaLinux 9, EPEL paketi | certbot-renew.timer | Elle etkinleştirilmesi gerekir |
AlmaLinux'ta zamanlayıcıyı etkinleştirin:
sudo systemctl enable --now certbot-renew.timer
Her dağıtımda zamanlayıcının listede olduğunu ve bir sonraki çalışma zamanını kontrol edin:
systemctl list-timers | grep -i certbot
Ardından yenilemenin gerçekten çalışacağını, gerçek bir sertifika almadan test edin:
sudo certbot renew --dry-run
Bu komut hatasız tamamlanıyorsa otomatik yenileme hazırdır. Nginx eklentisiyle alınan sertifikalarda yenilemeden sonra Nginx otomatik olarak yeniden yüklenir.
Yenileme Sonrası Başka Servisleri Yeniden Yüklemek
Aynı sertifikayı Postfix, Dovecot veya bir Node.js uygulaması gibi başka servisler de kullanıyorsa, yenilemeden sonra onların da yeniden yüklenmesi gerekir. Bunun için deploy hook dizinine çalıştırılabilir bir betik koyun:
sudo nano /etc/letsencrypt/renewal-hooks/deploy/reload-services.sh
#!/bin/sh
systemctl reload postfix
sudo chmod +x /etc/letsencrypt/renewal-hooks/deploy/reload-services.sh
Bu dizindeki betikler yalnızca bir sertifika başarıyla yenilendiğinde çalışır.
Joker (Wildcard) Sertifika
*.ornek.com biçimindeki joker sertifikalar yalnızca DNS-01 doğrulamasıyla alınabilir. Elle yöntem şu şekildedir:
sudo certbot certonly --manual --preferred-challenges dns -d 'ornek.com' -d '*.ornek.com'
Certbot size eklemeniz gereken TXT kaydını gösterir. Ancak --manual yöntemiyle alınan sertifikalar otomatik yenilenemez, çünkü her seferinde yeni bir TXT değeri gerekir. Joker sertifikayı kalıcı kullanacaksanız DNS sağlayıcınıza uygun bir Certbot DNS eklentisi kullanarak süreci otomatikleştirin.
Sık Karşılaşılan Hatalar ve Çözümleri
- Timeout during connect veya Connection refused: 80 numaralı port güvenlik duvarında kapalıdır ya da Nginx çalışmıyordur. UFW'de
Nginx Fullprofilini, AlmaLinux'ta firewalld servislerini kontrol edin. - Invalid response from ... 404: İstek başka bir sunucuya veya başka bir server block'a gidiyordur. A ve AAAA kayıtlarını ve
server_namesatırını doğrulayın. - Could not automatically find a matching server block:
-dile verdiğiniz alan adı hiçbir server block'unserver_namesatırında yok. - CAA kaydı engeli: Alan adında CAA kaydı varsa letsencrypt.org'a izin vermelidir.
- Too many certificates veya rate limit: Let's Encrypt'in sertifika verme sınırları vardır. Denemelerinizi
--dry-runveya test ortamını kullanan--test-certparametresiyle yapın.
Sertifikayı Kontrol Etme ve İzleme
Sunucunuzdaki sertifikaları ve bitiş tarihlerini listelemek için:
sudo certbot certificates
Sitenizin dışarıdan nasıl göründüğünü, zincirin eksiksiz olup olmadığını ve kalan süreyi SSL kontrol aracımızla doğrulayabilirsiniz. Let's Encrypt süre dolum hatırlatma e-postalarını sonlandırdığı için, yenilemenin çalıştığını kendi izleme yönteminizle takip etmeniz önemlidir.
Sık Sorulan Sorular
Let's Encrypt sertifikası ücretli sertifikadan daha mı az güvenli?
Hayır. Şifreleme gücü aynıdır. Fark, doğrulama türündedir: Let's Encrypt yalnızca alan adı doğrulamalı sertifika verir; kurum bilgisinin doğrulandığı OV veya EV sertifikaları vermez.
Certbot'u Apache ile kullanabilir miyim?
Evet. Apache için python3-certbot-apache paketini kurup --apache parametresini kullanırsınız; mantık aynıdır.
Sunucumda kontrol paneli varsa Certbot kurmalı mıyım?
Genellikle hayır. cPanel ve Plesk gibi paneller kendi SSL otomasyonlarına sahiptir. Panelin yönettiği yapılandırmalara Certbot ile müdahale etmek çakışmalara yol açabilir.
Sertifikayı nasıl iptal eder veya silerim?
Özel anahtarın ele geçirildiğinden şüpheleniyorsanız sudo certbot revoke --cert-name ornek.com ile iptal edin. Yalnızca sunucudan kaldırmak için sudo certbot delete --cert-name ornek.com kullanın ve Nginx yapılandırmasındaki ilgili satırları temizleyin.
Ücretsiz SSL kurulumu birkaç dakikanızı alır, ama ziyaretçi güveni ve arama motoru görünürlüğü açısından getirisi kalıcıdır. PHP tabanlı bir site yayınlıyorsanız tüm yığını LEMP stack kurulum rehberimizle tamamlayabilirsiniz. Kendi sertifikalarınızı tam yetkiyle yönettiğiniz bir ortam için DDoS korumalı VDS satın al sayfamızdaki paketleri, başlangıç projeleri için ise VPS sunucu seçeneklerini inceleyebilirsiniz.
Hizmet Sözleşmemiz
Web Koruma
İade Politikamız
