Kurulum Rehberleri

SSL Sertifikası Kurulumu: Let's Encrypt

Certbot ile Let's Encrypt'ten ücretsiz SSL sertifikası alıp Nginx ya da Apache'ye kurmayı, otomatik yenilemeyi ve HTTPS yönlendirmesini adım adım anlatıyoruz.

Aurora YazılımEditör ekibi 6 dk okuma
SSL Sertifikası Kurulumu: Let's Encrypt
Let's Encrypt ile SSL sertifikası kurulumu nasıl yapılır?

SSL sertifikası kurulumu için alan adınızın sunucuyu göstermesi ve 80 portunun açık olması gerekir. Sunucuya Certbot'u kurup sudo certbot --nginx ya da --apache komutunu çalıştırırsınız; Certbot sertifikayı alır, web sunucusunu ayarlar ve otomatik yenilemeyi kurar. Son adım certbot renew --dry-run ile yenilemeyi test etmektir.

Let's Encrypt ve Certbot Nedir?

Let's Encrypt, kâr amacı gütmeyen ISRG tarafından işletilen ve alan adı doğrulamalı (DV) sertifikaları ücretsiz veren bir sertifika otoritesidir. Sertifikanın ne işe yaradığını ve türlerini merak ediyorsanız önce SSL sertifikası nedir yazımıza bakabilirsiniz.

Certbot ise EFF'nin geliştirdiği, Let's Encrypt ile ACME protokolü üzerinden konuşan resmî istemcidir. Sertifikayı ister, alan adının size ait olduğunu doğrular, Nginx ya da Apache ayarını yapar ve yenilemeyi zamanlar.

Let's Encrypt sertifikaları kısa ömürlüdür; varsayılan geçerlilik 90 gündür ve kuruluş bu süreyi kademeli olarak kısaltacağını duyurmuştur. Bu yüzden elle yenileme yerine her zaman otomatik yenilemeye güvenin.

Kurulumdan Önce Kontrol Listesi

Certbot'un en sık başarısız olduğu nokta alan adı doğrulamasıdır. Aşağıdaki maddeler tamamsa kurulum genellikle birkaç dakikada biter.

  • Alan adının A ve AAAA kayıtları doğru sunucu IP'sini gösteriyor (AAAA kaydı varsa IPv6 tarafında da site yanıt vermeli)
  • Sunucuda 80 ve 443 portları güvenlik duvarında açık
  • Nginx ya da Apache çalışıyor ve alan adı için bir sunucu bloğu ya da sanal konak tanımlı
  • Sunucuya SSH ile sudo yetkili bir kullanıcıyla bağlanabiliyorsunuz
  • Cloudflare gibi bir vekil kullanıyorsanız ilk kurulumda proxy ayarını biliyorsunuz
bashDNS ve port kontrolü
dig +short ornek.com A
dig +short www.ornek.com A
sudo ufw status
# Nginx kullanıyorsanız
sudo ufw allow 'Nginx Full'

Certbot Kurulumu Adım Adım

Certbot'un resmî sitesi certbot.eff.org Ubuntu ve Debian için snap paketini önerir; böylece Certbot dağıtımdan bağımsız olarak güncel kalır. Snap kullanmak istemezseniz dağıtımın kendi apt paketleri de çalışır.

Snap ile (önerilen)

Sistemde daha önce apt ile kurulmuş bir certbot paketi varsa çakışmayı önlemek için önce onu kaldırın.

bash
sudo apt remove certbot
sudo snap install --classic certbot
sudo ln -s /snap/bin/certbot /usr/bin/certbot
certbot --version

apt paketiyle

Bu yöntemde web sunucusuna uygun eklenti paketini de kurmanız gerekir.

bash
sudo apt update
# Nginx için
sudo apt install certbot python3-certbot-nginx
# Apache için
sudo apt install certbot python3-certbot-apache

Sertifikayı Alma ve Sunucuya Kurma

Certbot, eklentisi sayesinde mevcut yapılandırmanızı okur ve server_name ya da ServerName değerlerine göre hangi alan adları için sertifika alacağını sorar. Hem çıplak alan adını hem www sürümünü aynı sertifikaya eklemek en sağlıklısıdır.

Komut sırasında bir e-posta adresi ve kullanım koşullarını kabul etmeniz istenir. Certbot doğrulama için geçici bir dosyayı .well-known/acme-challenge yolunda yayınlar, Let's Encrypt bu dosyayı 80 portundan okuyarak alan adının size ait olduğunu doğrular.

  • Sertifika dosyaları /etc/letsencrypt/live/ornek.com/ altında tutulur.
  • fullchain.pem sunucu sertifikası ile ara sertifikayı birlikte içerir; web sunucusunda bunu kullanın.
  • privkey.pem özel anahtardır; hiçbir yere kopyalamayın ve paylaşmayın.
bashNginx
sudo certbot --nginx -d ornek.com -d www.ornek.com
bashApache
sudo certbot --apache -d ornek.com -d www.ornek.com
bashYalnız sertifika (webroot yöntemi)
sudo certbot certonly --webroot -w /var/www/ornek.com/html \
  -d ornek.com -d www.ornek.com

Otomatik Yenileme Nasıl Kurulur?

Snap ve apt paketleri kurulumla birlikte bir systemd zamanlayıcısı ya da cron görevi ekler. Bu görev günde birkaç kez çalışır ve süresinin dolmasına yaklaşan sertifikaları yeniler. Yapmanız gereken tek şey yenilemenin gerçekten çalıştığını test etmektir.

Let's Encrypt süre dolum uyarı e-postalarını göndermeyi bıraktığı için sertifika bitiş tarihini kendi izleme aracınızla takip etmek iyi bir alışkanlıktır. Yenilemeden sonra web sunucusunun yeni sertifikayı okuması için bir yenileme kancası (deploy hook) da tanımlayabilirsiniz.

bash
sudo certbot renew --dry-run
sudo certbot certificates
systemctl list-timers | grep -i certbot

# Her başarılı yenilemeden sonra Nginx'i yeniden yükleyen kanca
echo '#!/bin/sh
systemctl reload nginx' | sudo tee /etc/letsencrypt/renewal-hooks/deploy/reload-nginx.sh
sudo chmod +x /etc/letsencrypt/renewal-hooks/deploy/reload-nginx.sh

HTTPS Yönlendirmesi ve Karışık İçerik

Certbot'un Nginx ve Apache eklentileri, HTTP isteklerini HTTPS'e yönlendiren kuralı genellikle sizin yerinize ekler. Elle yapmak isterseniz kalıcı 301 yönlendirmesi kullanın; böylece arama motorları eski adreslerin değerini yeni adrese taşır.

Apache kullanan paylaşımlı barındırmalarda aynı işi .htaccess dosyasıyla yaparsınız; ayrıntılı kurallar htaccess yönlendirme rehberimizde. Yönlendirmeden sonra sayfada hâlâ http:// ile çağrılan görsel, betik ya da font varsa tarayıcı karışık içerik uyarısı verir; bu adresleri https ya da göreli yolla değiştirin.

nginxNginx elle yönlendirme
server {
    listen 80;
    listen [::]:80;
    server_name ornek.com www.ornek.com;
    return 301 https://ornek.com$request_uri;
}

HSTS ve Güvenli TLS Ayarları

Yönlendirme çalıştıktan sonra HSTS başlığıyla tarayıcıya sitenizi bundan sonra yalnızca HTTPS ile açmasını söyleyebilirsiniz. Bu başlık, ilk ziyaretten sonra araya girilerek bağlantının HTTP'ye düşürülmesini engeller.

HSTS'i aceleyle uzun süreli açmayın. Alt alan adlarınızdan biri hâlâ HTTPS desteklemiyorsa o adrese erişim kesilir. Önce kısa bir max-age değeriyle deneyin, her şey sorunsuzsa süreyi uzatın; includeSubDomains ve preload seçeneklerini ancak tüm alt alan adlarının hazır olduğundan eminken ekleyin.

Certbot'un Nginx ve Apache eklentileri güncel ve güvenli TLS protokol ayarlarını içeren bir yapılandırma dosyası ekler. Eski TLS 1.0 ve 1.1 sürümlerini kapalı tutun; sunucunuzun yapılandırmasını SSL Labs gibi herkese açık test araçlarıyla periyodik olarak kontrol etmek, gözden kaçan zayıf bir ayarı erkenden fark etmenizi sağlar.

nginxKısa süreli HSTS denemesi
# 443 sunucu bloğunun içine
add_header Strict-Transport-Security "max-age=300" always;

Doğrulama ve Sık Hatalar

Kurulumu tarayıcıdaki kilit simgesiyle yetinmeden komut satırından da doğrulayın. Aşağıdaki komutlar sertifikanın kim tarafından verildiğini, bitiş tarihini ve yönlendirme zincirini gösterir.

HataÇözüm
Timeout during connect80 portu kapalı ya da DNS yanlış sunucuyu gösteriyor; güvenlik duvarını ve A kaydını kontrol edin.
Unauthorized / 404 challengeDoğrulama dosyası okunamıyor; webroot yolunu ve yönlendirme kurallarını kontrol edin.
Too many certificatesKısa sürede çok fazla deneme yapıldı; denemeleri --dry-run ya da --staging ile yapın.
Could not find a server blockserver_name satırında alan adı yok; sunucu bloğuna ekleyip nginx -t ile test edin.
Tarayıcıda eski sertifikaWeb sunucusu yeniden yüklenmedi; reload komutunu ya da deploy hook'u kullanın.
bash
curl -I http://ornek.com
curl -I https://www.ornek.com
openssl s_client -connect ornek.com:443 -servername ornek.com </dev/null 2>/dev/null \
  | openssl x509 -noout -issuer -dates

Joker Sertifika, Windows ve Paneller

*.ornek.com biçimindeki joker (wildcard) sertifika yalnızca DNS doğrulamasıyla alınır. Certbot'un DNS sağlayıcınıza özel eklentisi varsa yenileme otomatik olur; --manual yöntemiyle alınan sertifikalar ise her seferinde elle TXT kaydı eklemenizi ister.

Windows Server ve IIS kullanıyorsanız ACME protokolünü destekleyen Windows istemcileriyle aynı sonuca ulaşabilirsiniz. Barındırma panelleri çoğunlukla Let's Encrypt desteğini tek tıklık bir seçenek olarak sunar; bu durumda sunucuya komut yazmanız gerekmez.

HTTPS, hız ve güvenlik çalışmasının yalnızca bir parçasıdır. HTTP/2, önbellek başlıkları ve sıkıştırma ile birlikte ele alındığında hem güven hem performans kazanırsınız; SEO uyumlu web tasarımı projelerimizde bu katmanları baştan planlıyoruz.

bash
sudo certbot certonly --manual --preferred-challenges dns \
  -d ornek.com -d "*.ornek.com"

Sık Sorulan Sorular

01Ücretsiz SSL ile ücretli SSL arasında güvenlik farkı var mı?

Şifreleme gücü açısından fark yoktur; ikisi de aynı standartları kullanır. Ücretli sertifikalar kurum doğrulaması (OV, EV), garanti poliçesi ya da destek gibi ek hizmetler sunar. Kurumsal bir sözleşme şartı yoksa çoğu site için Let's Encrypt yeterlidir.

02Sertifika yenilenmezse ne olur?

Süresi dolan sertifikada tarayıcılar ziyaretçiye tam sayfa güvenlik uyarısı gösterir ve çoğu kişi siteden ayrılır. Ödeme sayfaları ve API bağlantıları da çalışmaz. Bu yüzden yenilemeyi kurulum günü test etmek ve bitiş tarihini izlemek gerekir.

03Cloudflare kullanırken Certbot çalışır mı?

Çalışır, ancak proxy açıkken HTTP doğrulaması bazen takılabilir. Cloudflare'in kendi kaynak sunucu sertifikasını kullanabilir ya da Certbot'u DNS doğrulamasıyla çalıştırabilirsiniz; SSL modunu Full (strict) seçmek en güvenli yoldur.

Certbot ile kurulan, yenilemesi test edilmiş ve HTTPS'e yönlendirilen bir site hem ziyaretçiye hem arama motoruna güven verir. Sertifika, yönlendirme ve sunucu ayarlarını hızla birlikte ele almak isterseniz hız ve performans yönetimi hizmetimize ya da tüm süreci kapsayan web tasarımı çözümlerimize göz atın. Mağaza kuruyorsanız sertifika ve sunucu tarafını sizin yerinize yöneten e-ticaret altyapısı seçeneklerini de inceleyebilir, sorularınız için iletişim sayfasından bize yazabilirsiniz.