Instalacja certyfikatu SSL w serwerze Apache
01.08.2022
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:
-
Skopiuj całą zawartość certyfikatu od linii
-----BEGIN CERTIFICATE-----
do-----END CERTIFICATE-----
i zapisz do pliku mojadomena.crt. - Skopiuj plik z certyfikatem
mojadomena.crt
do katalogu w którym będzie przechowywany certyfikat, np.:
/etc/ssl/certs/
- Otwórz plik konfiguracyjny Apache'a apache2.conf w edytorze tekstowym.
- 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łówSSLv2
,SSLv3
,TLSv1.0
,TLSv1.1
. Włączenie aktualnie bezpiecznych protokołówTLSv1.2
iTLSv1.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)
-
- Zapisz zmiany.
- Zrestartuj serwer Apache używając następujących poleceń:
sudo service apache2 restart
dystrybucje Red Hat/ Fedora/ CentOS
apachectl restart
sudo /usr/sbin/apachectl restart
- Przetestuj zdalnie konfigurację serwera za pomocą publicznego serwisu
DigiCert Check website security lub
Qualys SSL Server Test.
Częste problemy
- Serwer Apache nie startuje. Komunikat o błędzie w
/var/log/apache2/error.log
:
Możliwe przyczyny:Invalid command 'SSLEngine', perhaps misspelled or defined by a module not included in the server configuration
- Brakujący moduł
ssl
w Apache'u.
Rozwiązanie problemu:
- Zainstaluj moduł
ssl
do serwera Apachesudo a2enmod ssl
- Zrestartuj Apache'a
sudo service apache2 restart
- Brakujący moduł
- Serwer Apache nie startuje. Komunikat o błędzie w
/var/log/apache2/error.log
:
Możliwe przyczyny i sposoby rozwiązania:AH02238: Unable to configure RSA server private key SSL Library Error: error:0B080074:x509 certificate routines:X509_check_private_key:key values mismatch
- Klucz prywatny nie pasuje do certyfikatu serwera. Upewnij się, czy używasz odpowiedniego klucza prywatnego.
- Serwer Apache nie startuje. Komunikat o błędzie w
/var/log/apache2/error.log
:
Możliwe przyczyny:Invalid command 'Header', perhaps misspelled or defined by a module not included in the server configuration
- Brakujący moduł
headers
w Apache'u.
Rozwiązanie problemu:
- Zainstaluj moduł
headers
do serwera Apachesudo a2enmod headers
- Zrestartuj Apache'a
sudo service apache2 restart
- Brakujący moduł
- Serwer Apache nie startuje. Na stronie z zainstalowanym certyfikatem SSL pojawia się kod błędu:
Przyczyna:ssl_error_weak_server_ephemeral_dh_key
- Serwer ma zainstalowany słaby publiczny klucz efemeryczny Diffiego-Hellmana
Rozwiązanie problemu:
- Zaktualizuj (lub dodaj) klucz efemeryczny Diffiego-Hellmana (dyrektywa
ssl_dhparam
). - Zrestartuj Apache'a
sudo service apache2 restart
Pokrewne linki
Przydatne linki
- Strona domowa serwera Apache: httpd.apache.org
- Apache SSL/TLS Encryption: httpd.apache.org/docs/2.4/ssl/