Guvenlik

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.

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Başa dön tuşu