OpenLiteSpeed SSL/TLS ve Let’s Encrypt Sertifika Yapılandırması

Web sunucunuzu SSL/TLS ile güvenli hale getirmek artık bir lüks değil, zorunluluk. Özellikle Let’s Encrypt’in ücretsiz sertifika sunmasıyla birlikte “sertifika parası yok” gerekçesi de ortadan kalktı. OpenLiteSpeed kullanıyorsanız bu süreç biraz farklı işliyor çünkü Apache veya Nginx’teki gibi doğrudan Certbot entegrasyonu yok. Ama endişelenmeyin, birkaç yöntemle bu işi gayet temiz halledebiliyoruz.

OpenLiteSpeed ve SSL Temelleri

OpenLiteSpeed, LiteSpeed Technologies’in açık kaynak web sunucusudur. Ticari LiteSpeed Enterprise’ın aksine, OpenLiteSpeed’de SSL yapılandırması web admin paneli üzerinden ya da doğrudan konfigürasyon dosyaları düzenlenerek yapılır. Sertifika yönetimi için acme.sh script’i en güvenilir çözüm olarak öne çıkıyor çünkü hem otomatik yenileme destekliyor hem de OpenLiteSpeed ile sorunsuz çalışıyor.

Bir sunucuda SSL kurulumu yapmadan önce şu gereksinimleri kontrol edin:

  • Sunucunuzun 80 ve 443 portları dışarıya açık olmalı
  • Alan adınızın DNS kayıtları sunucunuzun IP adresine işaret etmeli
  • OpenLiteSpeed çalışıyor olmalı (port 80 aktif)
  • Root veya sudo yetkisine sahip olmalısınız

acme.sh Kurulumu

Certbot’un OpenLiteSpeed için resmi desteği olmadığı için acme.sh kullanacağız. Bu script, ACME protokolünü destekleyen tüm CA’larla çalışıyor ve Let’s Encrypt için ideal.

# acme.sh kurulumu
curl https://get.acme.sh | sh -s [email protected]

# Shell'i yeniden yükle
source ~/.bashrc

# Kurulumu doğrula
acme.sh --version

Kurulum tamamlandıktan sonra ~/.acme.sh/ dizini oluşturulur ve cron job otomatik eklenir. Bu cron job her gün sertifika yenileme kontrolü yapar.

# Cron job'ı kontrol et
crontab -l | grep acme

Çıktıda şuna benzer bir satır görmelisiniz:

0 0 * * * "/root/.acme.sh"/acme.sh --cron --home "/root/.acme.sh" > /dev/null

Sertifika Dizin Yapısını Hazırlama

Sertifikaları OpenLiteSpeed’in erişebileceği uygun bir dizinde saklamak önemli. Ben genellikle şu yapıyı kullanıyorum:

# Sertifika dizini oluştur
mkdir -p /etc/lsws/conf/ssl/example.com

# Dizin izinlerini ayarla
chmod 700 /etc/lsws/conf/ssl/
chmod 700 /etc/lsws/conf/ssl/example.com/

OpenLiteSpeed’in nobody kullanıcısı olarak çalıştığını unutmayın. Sertifika dosyalarının okunabilir olması gerekiyor ama özel anahtarın (private key) gereksiz yere açık olmaması önemli.

HTTP-01 Challenge ile Sertifika Alma

En yaygın yöntem webroot doğrulamasıdır. Bunun için önce OpenLiteSpeed’in port 80’de çalışıyor olması ve challenge dosyalarını sunabilmesi gerekiyor.

# Webroot yöntemi ile sertifika al
acme.sh --issue -d example.com -d www.example.com 
  --webroot /var/www/html/example.com 
  --cert-file /etc/lsws/conf/ssl/example.com/cert.pem 
  --key-file /etc/lsws/conf/ssl/example.com/key.pem 
  --ca-file /etc/lsws/conf/ssl/example.com/ca.pem 
  --fullchain-file /etc/lsws/conf/ssl/example.com/fullchain.pem

Eğer webroot yöntemi çalışmıyorsa standalone modda deneyin. Bu durumda OpenLiteSpeed’i geçici olarak durdurmanız gerekiyor:

# OpenLiteSpeed'i durdur
systemctl stop lsws

# Standalone modda sertifika al
acme.sh --issue --standalone -d example.com -d www.example.com

# OpenLiteSpeed'i tekrar başlat
systemctl start lsws

Üretim ortamında standalone modu downtime yarattığı için tercih etmiyorum. Webroot ya da DNS-01 challenge çok daha temiz çözümler.

DNS-01 Challenge ile Wildcard Sertifika

Wildcard sertifika almak istiyorsanız veya sunucunuz 80 portunda erişilebilir değilse DNS-01 challenge kullanmanız gerekiyor. Cloudflare kullanıyorsanız bu işlemi tamamen otomatize edebilirsiniz.

# Cloudflare API token'ını ayarla
export CF_Token="your_cloudflare_api_token"
export CF_Account_ID="your_account_id"

# Wildcard sertifika al
acme.sh --issue --dns dns_cf 
  -d example.com 
  -d "*.example.com" 
  --cert-file /etc/lsws/conf/ssl/example.com/cert.pem 
  --key-file /etc/lsws/conf/ssl/example.com/key.pem 
  --ca-file /etc/lsws/conf/ssl/example.com/ca.pem 
  --fullchain-file /etc/lsws/conf/ssl/example.com/fullchain.pem

API token’ını kalıcı hale getirmek için ~/.acme.sh/account.conf dosyasına ekleyebilirsiniz. Bu sayede yenileme işlemlerinde tekrar girmenize gerek kalmaz.

# API bilgilerini kalıcı kaydet
echo 'CF_Token="your_cloudflare_api_token"' >> ~/.acme.sh/account.conf
echo 'CF_Account_ID="your_account_id"' >> ~/.acme.sh/account.conf

OpenLiteSpeed Web Admin Panelinden SSL Yapılandırması

Sertifikaları aldıktan sonra OpenLiteSpeed’e tanıtmamız gerekiyor. Web admin paneli https://sunucu-ip:7080 adresinde çalışıyor.

Panel üzerinden SSL yapılandırması için şu adımları izleyin:

  • Listeners bölümüne gidin
  • Mevcut HTTPS listener’ı yoksa yeni bir listener ekleyin
  • Listener adını HTTPS olarak belirleyin
  • Port olarak 443 girin
  • Secure seçeneğini Yes yapın
  • SSL Private Key & Certificate bölümünde dosya yollarını girin

Ama ben her zaman doğrudan config dosyası üzerinden çalışmayı tercih ederim. Daha hızlı ve script’lenebilir.

Config Dosyası ile SSL Yapılandırması

OpenLiteSpeed’in ana konfigürasyon dosyası /usr/local/lsws/conf/httpd_config.conf konumundadır. Virtual host konfigürasyonları ise /usr/local/lsws/conf/vhosts/ altında bulunur.

Önce HTTPS için bir listener oluşturalım:

# OpenLiteSpeed ana config dosyasını düzenle
nano /usr/local/lsws/conf/httpd_config.conf

Listener bölümüne şunları ekleyin:

listener HTTPS {
  address                 *:443
  secure                  1
  keyFile                 /etc/lsws/conf/ssl/example.com/key.pem
  certFile                /etc/lsws/conf/ssl/example.com/cert.pem
  CACertFile              /etc/lsws/conf/ssl/example.com/ca.pem
  certChain               1
  sslProtocol             24
  ciphers                 ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384
  enableECDHE             1
  renegProtection         1
  sslSessionCache         1
  sslSessionTickets       0
}

listenerList {
  *:443 {
    vhostMapList {
      example.com         example_com
    }
  }
}

Virtual Host SSL Yapılandırması

Her virtual host için ayrı SSL sertifikası kullanabilirsiniz. Bu özellikle birden fazla alan adı barındıran sunucularda kritik önem taşıyor.

# Virtual host config dosyasını düzenle
nano /usr/local/lsws/conf/vhosts/example_com/vhconf.conf

Dosyaya şu bölümü ekleyin:

vhost example_com {
  vhRoot                  /var/www/html/example.com/
  configFile              $SERVER_ROOT/conf/vhosts/example_com/vhconf.conf
  allowSymbolLink         1
  enableScript            1
  restrained              0

  docRoot                 $VH_ROOT/public_html/

  errorlog $VH_ROOT/logs/error.log {
    useServer               0
    logLevel                WARN
    rollingSize             10M
  }

  accesslog $VH_ROOT/logs/access.log {
    useServer               0
    logFormat               "%h %l %u %t "%r" %>s %b"
    logHeaders              5
    rollingSize             10M
    keepDays                30
  }

  index {
    useServer               0
    indexFiles              index.html, index.php
  }

  # SSL Yapılandırması
  ssl {
    keyFile                 /etc/lsws/conf/ssl/example.com/key.pem
    certFile                /etc/lsws/conf/ssl/example.com/cert.pem
    CACertFile              /etc/lsws/conf/ssl/example.com/ca.pem
    certChain               1
    sslProtocol             24
    ciphers                 ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256
    enableECDHE             1
  }
}

Yapılandırmayı uygulamak için OpenLiteSpeed’i graceful restart yapın:

# Graceful restart (aktif bağlantıları kesmez)
kill -USR1 $(cat /tmp/lshttpd/lshttpd.pid)

# Ya da service komutu ile
systemctl reload lsws

HTTP’den HTTPS’ye Yönlendirme

SSL kurulumu tamam ama kullanıcılar hala http:// ile geliyorsa onları otomatik yönlendirmeniz gerekiyor. OpenLiteSpeed’de bunu rewrite kuralları ile yapıyoruz.

# Virtual host config'ine rewrite kuralı ekle
nano /usr/local/lsws/conf/vhosts/example_com/vhconf.conf
# Rewrite bölümünü ekle
rewrite {
  enable                  1
  rules                   <<<END_RULES
  RewriteCond %{HTTPS} off
  RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
  END_RULES
}

Alternatif olarak .htaccess dosyasını da kullanabilirsiniz:

# .htaccess ile yönlendirme
cat > /var/www/html/example.com/public_html/.htaccess << 'EOF'
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
EOF

Otomatik Sertifika Yenileme

Let’s Encrypt sertifikaları 90 gün geçerlidir. acme.sh otomatik yenileme için cron job ekliyor ama OpenLiteSpeed’i yenileme sonrası yeniden yüklemesi için hook ayarlamamız gerekiyor.

# Yenileme hook scripti oluştur
cat > /usr/local/bin/renew-ssl-hook.sh << 'EOF'
#!/bin/bash
# SSL sertifika yenileme sonrası OpenLiteSpeed'i yeniden yükle
echo "$(date): SSL sertifikası yenilendi, OpenLiteSpeed yeniden yükleniyor..." >> /var/log/ssl-renew.log
systemctl reload lsws
if [ $? -eq 0 ]; then
    echo "$(date): OpenLiteSpeed başarıyla yeniden yüklendi." >> /var/log/ssl-renew.log
else
    echo "$(date): HATA: OpenLiteSpeed yeniden yükleme başarısız!" >> /var/log/ssl-renew.log
fi
EOF

chmod +x /usr/local/bin/renew-ssl-hook.sh

Hook’u acme.sh‘e tanıtalım:

# Hook'u acme.sh'e ekle
acme.sh --install-cert -d example.com 
  --cert-file /etc/lsws/conf/ssl/example.com/cert.pem 
  --key-file /etc/lsws/conf/ssl/example.com/key.pem 
  --fullchain-file /etc/lsws/conf/ssl/example.com/fullchain.pem 
  --reloadcmd "/usr/local/bin/renew-ssl-hook.sh"

Yenileme işlemini test etmek için:

# Yenilemeyi test et (gerçekten yenilemez, sadece test)
acme.sh --renew -d example.com --force --dry-run

# Gerçek yenileme testi
acme.sh --renew -d example.com --force

TLS Güvenlik Ayarları

Modern TLS standartlarına göre yapılandırma yapmak önemli. TLS 1.0 ve 1.1 artık güvensiz kabul ediliyor, sadece TLS 1.2 ve 1.3 kullanmalısınız.

sslProtocol parametresindeki sayısal değerlerin anlamları:

  • 1: TLS 1.0 (kullanmayın)
  • 2: TLS 1.1 (kullanmayın)
  • 4: TLS 1.2
  • 8: TLS 1.3
  • 24: TLS 1.2 + TLS 1.3 (önerilen)

Admin panelinden ya da config dosyasından şu ayarları yapın:

# Güvenli TLS yapılandırması için listener ayarları
ssl {
  sslProtocol             24
  ciphers                 ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305
  enableECDHE             1
  renegProtection         1
  sslSessionCache         1
  sslSessionTickets       0
  enableSpdy              15
}

HSTS başlığı eklemek için virtual host context’ine şunu ekleyin:

# HSTS header ekle
context / {
  extraHeaders            <<<END_HEADERS
  Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"
  Header always set X-Content-Type-Options "nosniff"
  Header always set X-Frame-Options "SAMEORIGIN"
  END_HEADERS
}

SSL Sertifikasını Test Etme

Yapılandırma tamamlandıktan sonra her şeyin doğru çalıştığını doğrulayın.

# SSL bağlantısını test et
openssl s_client -connect example.com:443 -tls1_2

# Sertifika bilgilerini görüntüle
openssl s_client -connect example.com:443 </dev/null 2>/dev/null | openssl x509 -noout -dates -subject -issuer

# TLS versiyonlarını test et
openssl s_client -connect example.com:443 -tls1   # Başarısız olmalı
openssl s_client -connect example.com:443 -tls1_1 # Başarısız olmalı
openssl s_client -connect example.com:443 -tls1_2 # Başarılı olmalı
openssl s_client -connect example.com:443 -tls1_3 # Başarılı olmalı

SSL Labs üzerinden de test yapabilirsiniz: https://www.ssllabs.com/ssltest/analyze.html?d=example.com

Doğru yapılandırma sonrası A veya A+ notu almalısınız.

Yaygın Sorunlar ve Çözümleri

Sertifika dosyası bulunamıyor hatası

OpenLiteSpeed’in sertifika dosyasını okuyamadığını hata logunda görüyorsanız izinleri kontrol edin:

# OpenLiteSpeed hata logunu kontrol et
tail -f /usr/local/lsws/logs/error.log

# Sertifika izinlerini düzelt
chmod 644 /etc/lsws/conf/ssl/example.com/cert.pem
chmod 644 /etc/lsws/conf/ssl/example.com/fullchain.pem
chmod 600 /etc/lsws/conf/ssl/example.com/key.pem
chown root:root /etc/lsws/conf/ssl/example.com/*

Challenge dosyasına erişilemiyor

Webroot doğrulaması başarısız oluyorsa /.well-known/acme-challenge/ dizinine erişim olup olmadığını kontrol edin:

# Challenge dizinini oluştur ve test et
mkdir -p /var/www/html/example.com/.well-known/acme-challenge/
echo "test" > /var/www/html/example.com/.well-known/acme-challenge/testfile
curl http://example.com/.well-known/acme-challenge/testfile

Mixed content uyarıları

HTTPS’e geçiş sonrası sayfada mixed content uyarısı görüyorsanız, HTML ve CSS içindeki http:// linklerini https:// ile değiştirmeniz gerekiyor. WordPress kullanıyorsanız Really Simple SSL eklentisi bu işi otomatik hallediyor.

Birden Fazla Alan Adı için Yapılandırma

Tek sunucuda birden fazla alan adı barındırıyorsanız her biri için ayrı sertifika alabilir veya SAN (Subject Alternative Name) sertifikası kullanabilirsiniz.

# Birden fazla domain için tek sertifika
acme.sh --issue -d example.com -d www.example.com 
  -d api.example.com -d admin.example.com 
  --webroot /var/www/html/example.com 
  --cert-file /etc/lsws/conf/ssl/example.com/cert.pem 
  --key-file /etc/lsws/conf/ssl/example.com/key.pem 
  --fullchain-file /etc/lsws/conf/ssl/example.com/fullchain.pem 
  --reloadcmd "systemctl reload lsws"

Her virtual host için ayrı sertifika tercih ediyorsanız sertifika dizin yapınızı şöyle organize edebilirsiniz:

/etc/lsws/conf/ssl/
├── example.com/
│   ├── cert.pem
│   ├── key.pem
│   └── fullchain.pem
├── otherdomain.com/
│   ├── cert.pem
│   ├── key.pem
│   └── fullchain.pem

Sonuç

OpenLiteSpeed üzerinde SSL/TLS yapılandırması ilk bakışta karmaşık görünebilir ama adımları takip edince oldukça mantıklı bir yapı ortaya çıkıyor. acme.sh aracını kullandığınızda sertifika alma, yükleme ve otomatik yenileme işlemlerini kolayca yönetebiliyorsunuz.

Önemli noktaları özetleyecek olursak: acme.sh ile sertifikalarınızı alın, doğru dizin izinlerini ayarlayın, TLS 1.2 ve 1.3’ü etkinleştirip eski protokolleri devre dışı bırakın, yenileme hook’u kurmayı unutmayın ve SSL Labs testi ile yapılandırmanızı doğrulayın. HSTS başlığı eklemek de güvenliği bir adım öteye taşıyor.

Üretim ortamında birkaç ay çalıştırdıktan sonra sertifika yenileme loglarını periyodik olarak kontrol etme alışkanlığı edinin. Otomatik yenileme çoğunlukla sorunsuz çalışıyor ama DNS değişikliği ya da firewall kuralı gibi beklenmedik durumlar sertifika yenilemeyi engelleyebilir. Sertifikanın 30 gün içinde sona ereceğine dair email uyarısı alırsanız hemen müdahale edin.

Yorum yapın