Certbot ile Let’s Encypt SSL Sertifikası Yenileme
SSL sertifikaları, web sitelerini güvence altına almak ve sunucular ile istemciler arasındaki iletişimin şifrelenmesini sağlamak için hayati öneme sahiptir. SSL sertifikalarını manuel olarak yenilemek hem zaman alıcıdır hem de insan hatalarına açık olabilir. Bu sürecin otomatikleştirilmesi, sertifika yönetimini kolaylaştırır, süresi dolmuş sertifikalardan kaynaklanabilecek kesinti riskini azaltır ve web altyapınız için sürekli güvenlik sağlar.
Örnek olarak Let’s Encrypt organizasyonunun ücretsiz ve kolay şekilde sağladığı uygulamayı kullanacağız.
Ön koşul olarak bir adet apache yüklü web sitesi çalıştıran sunucunuz ve sunucunuza ait bir adet domain veya hostname adresinizin A kaydı ile dns üzerinden ip adresinin kayıtlı olduğundan emin olalım. Daha sonra buradan devam edebilirsiniz.
İlk önce her zaman olduğu gibi paket yönetimimizi güncelleyerek başlayalım
sudo apt update
Şimdi certbot’u yükleyelim. Certbot ücretsiz ve açık kaynaklı , sertifika yükleyip yenileme işlemini otomize eden bir araçtır.
sudo apt install certbot python3-certbot-nginx
Sonrasında bulunduğumuz dizinde bir adet ssl.sh dosyası oluşturalım.
vi ssl.sh
Aşağıdaki bash scripti yapıştıralım sonra dosyayı kaydedin ve editörden çıkın.
#!/bin/bash
# Define domain and email variables
DOMAIN="devopsdeniz.com"
EMAIL="[email protected]"
# Define the path to the Let's Encrypt script
LE_SCRIPT="/usr/bin/certbot"
# Define the path to the SSL certificate
CERTIFICATE_PATH="/etc/letsencrypt/live/$DOMAIN/fullchain.pem"
# Define the path to the certificate renewal log file
LOG_FILE="/var/log/certbot-renewal.log"
# Check if the certificate needs renewal
if ! $LE_SCRIPT renew --dry-run > $LOG_FILE 2>&1; then
# Certificate needs renewal, execute renewal
echo "$(date +"%Y-%m-%d %H:%M:%S") - Certificate for $DOMAIN needs renewal" >> $LOG_FILE
# Execute certificate renewal
$LE_SCRIPT renew --noninteractive --agree-tos --email $EMAIL >> $LOG_FILE 2>&1
# Check if renewal was successful
if [ $? -eq 0 ]; then
echo "$(date +"%Y-%m-%d %H:%M:%S") - Certificate for $DOMAIN successfully renewed" >> $LOG_FILE
# Restart web server to apply changes (Apache)
systemctl restart httpd
else
echo "$(date +"%Y-%m-%d %H:%M:%S") - Certificate renewal for $DOMAIN failed" >> $LOG_FILE
fi
else
# Certificate doesn't need renewal
echo "$(date +"%Y-%m-%d %H:%M:%S") - Certificate for $DOMAIN is up to date, no renewal needed" >> $LOG_FILE
fi
Script 4 adet değerden oluşuyor. Bunlar:
DOMAIN
: sertifikasının verildiği etki alanını belirtir. Burada devopsdeniz.com örnektir. Kendi web adresiniz için düzenlemeniz gerekiyor.EMAIL
: bildirim almak için bir tane email adresinizi yazabilirsiniz.LE_SCRIPT
: SSL sertifikasının verilmesini ve yenilenmesini yöneten Certbot yürütülebilir dosyasının yolu.CERTIFICATE_PATH
:SSL sertifikasının yolu. Certbot’un belirtilen etki alanı için sertifikaların tam zincirini depoladığı yer burasıdır.LOG_FILE
: Yenileme etkinliklerinin ve sonuçlarının kaydedildiği günlük dosyasının yolu.
Bu komut, sertifikanın bir deneme çalışması (–dry-run) gerçekleştirerek yenilenmesi gerekip gerekmediğini kontrol eder. Deneme çalışması, herhangi bir değişiklik yapmadan yenileme sürecini simüle eder. Çıktı LOG_FILE’a kaydedilir. Log’a göre sertifika renew –noninteractive ile başlayan komutla yenilenir.
Her şey hazırsa Dosyanın izinlerini chmod komutunu kullanarak çalıştırılabilir hale getirin ve çalıştırın
chmod +x ssl.sh
bash ssl.sh
Sertifikanın yenilenip yenilenmediğini /var/log/certbot-renewal.log dosyasını ziyaret ederek kontrol ederiz
cat /var/log/certbot-renewal.log
Bu makalede özetlenen betiği uygulayarak, web sitesi yöneticileri SSL sertifikalarının manuel müdahale olmadan her zaman güncel olduğundan emin olabilirler. Bu yalnızca güvenliği artırmakla kalmaz, aynı zamanda süresi dolan sertifikalar nedeniyle hizmet kesintileri riskini de en aza indirir.