Konfiguracja SSL dla Apache na 5+
Napisał: Patryk Krawaczyński
17/02/2019 w Bezpieczeństwo Brak komentarzy. (artykuł nr 679, ilość słów: 378)
P
oniższa konfiguracja (podobnie, jak w przypadku nginx) serwera Apache dla komunikacji po https pozwala na uzyskanie oceny A+ w teście przeprowadzanym przez firmę Qualys SSL Labs. Innymi mechanizmami, które zostały zwarte to: HSTS, DNS CAA, OSCP oraz HTTP2. Stosując poniższą konfigurację należy liczyć się, że może ona nie działać (lub niektóre jej funkcjonalności) z starszymi przeglądarkami i aplikacjami typu Java.
Protocols http/1.1 h2 SSLEngine on SSLCompression off SSLSessionTickets off SSLUseStapling on SSLCertificateFile /etc/apache2/ssl/root.pem SSLCertificateKeyFile /etc/apache2/ssl/server.key SSLCertificateChainFile /etc/apache2/ssl/root.pem SSLProtocol -All +TLSv1.2 SSLHonorCipherOrder on SSLCipherSuite "HIGH:!aNULL:!MD5:!3DES:!CAMELLIA:!AES128:!AES256-SHA:\ !AES256-SHA256:!AES256-GCM-SHA384:!AES256-CCM8:!AES256-CCM:\ !DHE-DSS-AES256-SHA:!SRP-DSS-AES-256-CBC-SHA" SSLOpenSSLConfCmd DHParameters "/etc/ssl/certs/dhparams4096.pem" SSLOpenSSLConfCmd ECDHParameters secp384r1 SSLOpenSSLConfCmd Curves secp521r1:secp384r1 Header always append Strict-Transport-Security "max-age=31536000;"
Plik dhparams4096.pem wygenerujemy poleceniem (może to zająć nawet kilkanaście minut):
openssl dhparam -out /etc/ssl/certs/dhparams4096.pem 4096
Do czego on jest nam potrzebny? Zanim klient i serwer będą mogli komunikować się zaszyfrowanym kanałem, klucze muszą zostać najpierw wymienione. Jest to słaby punkt tego procesu. Jeśli wymiana kluczy nie jest szyfrowana, a ktoś nieautoryzowany podsłucha komunikację, kolejny krok szyfrowania staje się bez znaczenia. To tak, jakbyśmy zostawili klucz do domu wetknięty po zewnętrznej stronie zamka. Dlatego wymiana kluczy powinna zostać zaszyfrowana przy użyciu algorytmu Diffie-Hellmana opartego na krzywych eliptycznych. Ponieważ klucze z 1024 bitami lub mniej są teraz łatwe do złamania najlepiej wygenerować klucz DH z co najmniej 2048 bitami lub najlepiej 4096.
Jeśli interesuje nas, jakie dokładnie szyfry kryją się za opcją SSLCipherSuite
możemy wydać polecenie:
openssl ciphers 'HIGH:!aNULL:!MD5:!3DES:!CAMELLIA:!AES128:\ !AES256-SHA:!AES256-SHA256:!AES256-GCM-SHA384:!AES256-CCM8:\ !AES256-CCM:!DHE-DSS-AES256-SHA:!SRP-DSS-AES-256-CBC-SHA'
Każdy z zwróconych szyfrów możemy sprawdzić na stronie Cipher Suite Info. Pamiętajmy tylko, że nawet jeśli pozbędziemy się każdego słabego szyfru (ang. weak) i pozostawimy tylko te zalecane (ang. recommended) – możemy doprowadzić do sytuacji, w której niektóre urządzenia i systemy nie będą w stanie przeprowadzić negocjacji szyfrowania zaliczając błąd handshake failure.