Problemy z dyrektywą SSLOpenSSLConfCmd w Apache2
Spis treści
W stabilnej dystrybucji linux'a Debian niewiele rzeczy ulega zmianie w przeciągu roku czy dwóch lat.
Dlatego też ta gałąź jest wykorzystywana głównie w przypadku serwerów, min. na tym VPS. Na co dzień
jednak korzystam z Debiana SID, czyli gałęzi niestabilnej, która jest nieco bardziej aktualna i
przystosowana do otaczającej nas tej wirtualnej rzeczywistości. Chodzi generalnie o nowsze
oprogramowanie implementujące całą masę ficzerów, których starsze wersje nie posiadają. W tym
przypadku problem dotyczy serwera Apache2, który ostatnimi czasy wypracował szereg mechanizmów
obronnych adresujących ataki na protokół SSL/TLS. Jedną z podatności jest słaba liczba pierwsza
wykorzystywana w protokole Diffie-Hellman'a. Ten problem można stosunkowo łatwo poprawić w
nowszej wersji Apache2 wykorzystując dyrektywę SSLOpenSSLConfCmd
. W starszych wersjach ona
niestety nie działa. Niemniej jednak, w dalszym ciągu możemy użyć własnych parametrów dla protokołu
Diffie-Hellman'a, z tym, że trzeba to zrobić nieco inaczej.
Optymalna liczba pierwsza dla protokołu Diffie-Hellman'a
Zgodnie z informacjami zawartymi na tej stronie), liczby pierwsze wykorzystywane w protokole Diffie-Hellman'a są podatne na atak w przypadku jeśli ich wielkość jest w granicach do 1024 bitów. Jeśli nasz serwer wykorzystuje liczbę o takiej długości, to powinniśmy ją jak najszybciej zmienić.
Jak ustalić długość bitów liczby pierwszej? Generalnie rzecz biorąc, ilość bitów jest zależna od OpenSSL, który w starszych wersjach ma uwzględnioną właśnie liczbę pierwszą o długości 1024 bitów. Nie koniecznie tak samo musi być i w naszym przypadku. Najlepiej jest przeprowadzić sobie test i ustalić długość tej liczby. Sam test liczby pierwszej jest dostępny tutaj. W przypadku tego Debiana, co sieci na moim VPS, wynik się prezentuje następująco:
Zatem tutaj wszystko jest w porządku. Co jednak w przypadku, gdy na powyższej fotce widniałaby wartość 1024 albo nawet i mniejsza? W takiej sytuacji trzeba by wygenerować własne parametry dla protokołu Diffie-Hellman'a, w których skład weszłaby większa liczba pierwsza. Załóżmy na chwilę, że te 2048 bitów to za mało i chcemy zrobić użytek z liczby pierwszej o długości 4096 bitów.
Dyrektywa SSLOpenSSLConfCmd
W konfiguracji modułu ssl
, tj. w pliku /etc/apache2/sites-enabled/default-ssl.conf
możemy
określić dyrektywę SSLOpenSSLConfCmd. W niej z kolei możemy podać opcję DHParameters
i
ścieżkę do pliku z parametrami dla protokołu Diffie-Hellman'a. Poniżej przykład:
SSLOpenSSLConfCmd DHParameters "/etc/letsencrypt/dh/dhparam.pem"
Teraz przy pomocy narzędzia openssl
musimy sobie ten plik wygenerować:
# openssl dhparam -out dhparam.pem 4096
Wykorzystana wyżej wartość 4096
to ilość bitów dla liczby pierwszej. Im więcej bitów określimy,
tym proces generowania pliku będzie trwał dłużej. W tym przypadku zajęło to kilkanaście minut.
Trzeba mieć jednak na względzie, że wymagane jest od nas posiadanie serwera Apache2 w wersji minimum 2.4.8 oraz OpenSSL w wersji co najmniej 1.0.2 . W Debianie stable, mamy zaś:
# apachectl -V
Server version: Apache/2.4.10 (Debian)
...
# openssl version
OpenSSL 1.0.1t 3 May 2016
Zatem ten powyższy sposób zmiany liczby pierwszej nie przejdzie ale nic straconego.
Dołączanie parametrów DH do certyfikatu
Starsze wersje serwera Apache2 nie obsługują dyrektywy SSLOpenSSLConfCmd
. Możemy jednak dołączyć
zawartość wyżej wygenerowanego pliku dhparam.pem
do pliku certyfikatu, którego ścieżka figuruje w
dyrektywie SSLCertificateFile
w konfiguracji wirtualnego hosta. Jeśli konfigurowaliśmy certyfikat
letsencrypt, to zawartość dhparam.pem
dopisujemy do pliku
/etc/letsencrypt/live/morfitronik.pl/fullchain.pem
. Robimy to w poniższy sposób:
# cat /etc/letsencrypt/dh/dhparam.pem >> /etc/letsencrypt/live/morfitronik.pl/fullchain.pem
Teraz już wystarczy zresetować serwer Apache2 i przetestować czy ta liczba pierwsza została uwzględniona przeprowadzając jeszcze raz test:
I jak widzimy, ilość bitów z 2048 wzrosła do 4096.