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ı
HTTPSolarak belirleyin - Port olarak
443girin - Secure seçeneğini
Yesyapı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.