Apache'de SSL Kurulumu ve .htaccess ile HTTPS Yönlendirme

Apache HTTP Server, hâlâ en yaygın web sunucularından biridir ve SSL desteğini mod_ssl modülüyle sağlar. Bu rehberde sertifikanızı bir VirtualHost içinde tanımlamayı ve .htaccess ile HTTP'den HTTPS'e yönlendirmeyi adım adım göreceğiz.

Gerekli dosyalar ve modül

Apache, sertifika parçalarını ayrı yönergelerle bekler:

  • SSLCertificateFilecertificate.crt (sunucu sertifikası)
  • SSLCertificateKeyFileprivate.key (özel anahtar)
  • SSLCertificateChainFileca_bundle.crt (ara zincir)

Bu dosyalara sahip değilseniz ücretsiz SSL sihirbazımız ile alan adınızı doğrulayıp ZIP paketinden bu üç dosyayı (ve isterseniz birleşik fullchain.pem) indirebilirsiniz.

Önce mod_ssl modülünün etkin olduğundan emin olun:

sudo a2enmod ssl
sudo systemctl restart apache2

Adım 1 — Dosyaları yerleştirin

sudo mkdir -p /etc/apache2/ssl/alanadiniz.com
sudo cp certificate.crt /etc/apache2/ssl/alanadiniz.com/
sudo cp private.key      /etc/apache2/ssl/alanadiniz.com/
sudo cp ca_bundle.crt    /etc/apache2/ssl/alanadiniz.com/
sudo chmod 600 /etc/apache2/ssl/alanadiniz.com/private.key

Adım 2 — VirtualHost'u yapılandırın

443 portu için bir sanal sunucu tanımlayın (ör. /etc/apache2/sites-available/alanadiniz-ssl.conf):

<VirtualHost *:443>
    ServerName alanadiniz.com
    ServerAlias www.alanadiniz.com
    DocumentRoot /var/www/alanadiniz.com

    SSLEngine on
    SSLCertificateFile      /etc/apache2/ssl/alanadiniz.com/certificate.crt
    SSLCertificateKeyFile   /etc/apache2/ssl/alanadiniz.com/private.key
    SSLCertificateChainFile /etc/apache2/ssl/alanadiniz.com/ca_bundle.crt

    SSLProtocol all -SSLv3 -TLSv1 -TLSv1.1

    <Directory /var/www/alanadiniz.com>
        AllowOverride All
        Require all granted
    </Directory>
</VirtualHost>

Not: Apache 2.4.8 ve sonrasında SSLCertificateChainFile yerine ara zinciri doğrudan SSLCertificateFile içine eklenmiş fullchain.pem kullanmak da geçerlidir.

Görsel: <Apache VirtualHost yapılandırması bir editörde>
443 portu için SSL yönergeleriyle yapılandırılmış VirtualHost.

Adım 3 — Siteyi etkinleştirin ve test edin

sudo a2ensite alanadiniz-ssl.conf
sudo apache2ctl configtest
sudo systemctl reload apache2

configtest çıktısı Syntax OK demelidir. RHEL/CentOS sistemlerinde servis adı httpd, dizin ise /etc/httpd/ olur.

Adım 4 — .htaccess ile HTTPS yönlendirme

Sitenizin kök dizinindeki .htaccess dosyasına aşağıdaki kuralı ekleyin. Bu, tüm HTTP isteklerini kalıcı (301) olarak HTTPS'e taşır:

RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

Yönlendirmenin çalıştığını terminalden doğrulayın:

curl -I http://alanadiniz.com

Yanıtta 301 Moved Permanently ve Location: https://... satırlarını görmelisiniz.

Sık karşılaşılan sorunlar

  • "AH02572: Failed to configure ... no private key": SSLCertificateKeyFile yolu yanlış ya da anahtar bozuk.
  • Tarayıcıda zincir uyarısı: SSLCertificateChainFile tanımlanmamış; ca_bundle.crt ekleyin.
  • .htaccess yok sayılıyor: İlgili Directory bloğunda AllowOverride All tanımlı olmalı.

Özet

Apache'de SSL, üç yönergenin (SSLCertificateFile, SSLCertificateKeyFile, SSLCertificateChainFile) doğru dosyalara işaret etmesinden ve .htaccess ile 301 yönlendirme kurmaktan ibarettir. Dosyalarınızı ücretsiz SSL sihirbazımız ile oluşturup ZIP'ten indirebilirsiniz.