Instalacja certyfikatu SSL w Apache 2.x

Apache logo


Instalacja Apache'a i aktywacja modułu mod_ssl w systemach linuksowych:

dystrybucje Debian/Ubuntu i inne bazujące na Debianie (np. Mint):

sudo apt-get install apache2
sudo a2enmod ssl

dystrybucje Red Hat/Fedora/CentOS:

yum install httpd
yum install mod_ssl

Instalacja certyfikatu SSL:

  1. Skopiuj całą zawartość certyfikatu od linii -----BEGIN CERTIFICATE----- do -----END CERTIFICATE----- i zapisz do pliku mojadomena.crt.
  2. Skopiuj plik z certyfikatem mojadomena.crt do katalogu w którym będzie przechowywany certyfikat, np.:
    /etc/ssl/certs/
  3. Otwórz plik konfiguracyjny Apache'a apache2.conf w edytorze tekstowym.
  4. Zlokalizuj dyrektywę VirtualHost dla twojego serwera wirtualnego. Do działania certyfikatu SSL niezbędne będą następujące dyrektywy:

    • SSLEngine on - włączenie SSL w Apache'u
    • SSLCertificateFile - plik zawierający certyfikat serwera oraz certyfikat pośredni (intermediate) odpowiedni dla zamówionego certyfikatu SSL
    • SSLCertificateKeyFile - plik zawierający klucz prywatny

    Uwaga! Instalacja certyfikatu pośredniego jest niezbędna do poprawnego funkcjonowania certyfikatu SSL.
    <VirtualHost 1.2.3.4:443>
       DocumentRoot /var/www
       ServerName www.moja-domena.pl
       SSLEngine on
       SSLCertificateFile /etc/ssl/certs/mojadomena.crt
       SSLCertificateKeyFile /etc/ssl/private/mojadomena.key
    </VirtualHost>

    Konfiguracja dodatkowa, zalecana:

    <VirtualHost 1.2.3.4:443>
      # [...]
      SSLProtocol all -SSLv3 -TLSv1 -TLSv1.1
      SSLCipherSuite ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256
      SSLHonorCipherOrder On
      SSLCompression off
      SSLSessionTickets off
      Header add Strict-Transport-Security "max-age=31536000"
      SSLUseStapling on
      SSLStaplingResponderTimeout 5
      SSLStaplingReturnResponderErrors off
      SSLStaplingCache shmcb:/var/run/ocsp(128000)
      # [...]
    </VirtualHost>
    • SSLProtocol all -SSLv3 -TLSv1 -TLSv1.1
      • włączenie protokołów TLSv1.2, jednocześnie wyłączenie przestarzałych SSLv2, SSLv3, TLSv1.0 i TLSv1.1. Obsługa protokołu TLSv1.2 jest dostępna od wersji OpenSSL 1.0.1.
    • SSLCipherSuite ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256 - ustawienie priorytetu dla silnych szyfrów, jednocześnie wyłączenie słabych i przestarzałych
    • SSLHonorCipherOrder On - wymuszenie przez serwer kolejności stosowania szyfrów zdefiniowanych dyrektywą SSLCipherSuite
    • Header add Strict-Transport-Security - Nagłówek Strict-Transport-Security (HSTS) powiadamia przeglądarkę aby za każdym razem łączyła się do serwera tylko poprzez protokół SSL (HTTPS). Czas ustalony w max-age podaje się w sekundach (31536000 sekund = 12 miesięcy)
  5. Zapisz zmiany.
  6. Zrestartuj serwer Apache używając następujących poleceń:

    dystrybucje Debian lub Ubuntu

    sudo service apache2 restart

    dystrybucje Red Hat/Fedora/CentOS

    apachectl restart

    OS X

    sudo /usr/sbin/apachectl restart
  7. Przetestuj zdalnie konfigurację serwera za pomocą publicznego serwisu DigiCert SSL Certificate Checker lub Qualys SSL Server Test.

    Qualys SSLLabs

Częste problemy

  1. Serwer Apache nie startuje. Komunikat o błędzie w /var/log/apache2/error.log:
    Invalid command 'SSLEngine', perhaps misspelled or defined by a module not included in the server configuration
    Możliwe przyczyny:

    1. Brakujący moduł ssl w Apache'u.

    Rozwiązanie problemu:

    1. Zainstaluj moduł ssl do serwera Apache
      sudo a2enmod ssl
    2. Zrestartuj Apache'a
      sudo service apache2 restart

  2. Serwer Apache nie startuje. Komunikat o błędzie w /var/log/apache2/error.log:
    AH02238: Unable to configure RSA server private key
    SSL Library Error: error:0B080074:x509 certificate routines:X509_check_private_key:key values mismatch
    Możliwe przyczyny i sposoby rozwiązania:

    1. Klucz prywatny nie pasuje do certyfikatu serwera. Upewnij się, czy używasz odpowiedniego klucza prywatnego.

  3. Serwer Apache nie startuje. Komunikat o błędzie w /var/log/apache2/error.log:
    Invalid command 'Header', perhaps misspelled or defined by a module not included in the server configuration
    Możliwe przyczyny:

    1. Brakujący moduł headers w Apache'u.

    Rozwiązanie problemu:

    1. Zainstaluj moduł headers do serwera Apache
      sudo a2enmod headers
    2. Zrestartuj Apache'a
      sudo service apache2 restart
  4. Serwer Apache nie startuje. Na stronie z zainstalowanym certyfikatem SSL pojawia się kod błędu:
    ssl_error_weak_server_ephemeral_dh_key
    Przyczyna:

    • Serwer ma zainstalowany słaby publiczny klucz efemeryczny Diffiego-Hellmana

    Rozwiązanie problemu:

    1. Zaktualizuj (lub dodaj) klucz efemeryczny Diffiego-Hellmana (dyrektywa ssl_dhparam).
    2. Zrestartuj Apache'a
      sudo service apache2 restart

Pokrewne linki

Przydatne linki