Gigaone Logo

Instalacja certyfikatu SSL w serwerze Apache

01.08.2022

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.

    Konfiguracja minimalna:

    <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 +TLSv1.2 +TLSv1.3
      SSLCipherSuite 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:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384
      SSLHonorCipherOrder off
      SSLSessionTickets off
      Header always set Strict-Transport-Security "max-age=31536000"
      SSLUseStapling on
      SSLStaplingCache "shmcb:logs/ssl_stapling(32768)"
      Protocols h2 http/1.1
      # [...]
    </VirtualHost>
    • SSLProtocol -all +TLSv1.2 +TLSv1.3 - wyłączenie przestarzałych protokołów SSLv2, SSLv3, TLSv1.0, TLSv1.1. Włączenie aktualnie bezpiecznych protokołów TLSv1.2 i TLSv1.3.
    • SSLCipherSuite 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:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384 - ustawienie priorytetu dla silnych szyfrów, jednocześnie wyłączenie słabych i przestarzałych
    • Protocols h2 http/1.1 - Włączenie protokołu HTTP/2
    • 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 Check website security 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