Jak skonfigurować serwer Apache do obsługi OpenSSL?

Treść dodana: 05 stycznia 2016.

W poprzednim artykule opisałem w jaki sposób skonfigurować serwer Apache do podstawowej pracy ze stronami internetowymi. Czasami zachodzi konieczność dodania obsługi bezpiecznych połączeń (https) dla któregoś z hostów wirtualnych. Pobierając wymienioną wcześniej paczkę Apache, posiadamy wszystkie niezbędne narzędzia do wygenerowania certyfikatu. Na potrzeby artykułu oraz dla uproszczenia założę, że certyfikat utworzymy dla istniejącego już hosta test.local.

Pierwsze co musimy zrobić, to wygenerować certyfikat dla domeny. W tym celu należy uruchomić wiersz poleceń systemu Windows, przejść w nim do folderu `bin` naszego serwera Apache (pamiętaj że klawisz tabulacji służy do podpowiadania katalogów):

d:
cd Server\Apache24\bin

W katalogu tym znajduje się już plik openssl.exe który posłuży nam do utworzenia certyfikatu. OpenSSL do działania wymaga pliku konfiguracyjnego openssl.cnf, który jest już umieszczony w folderze d:\Server\Apache24\conf. Najłatwiej będzie ustawić zmienną środowiskową z informacją dla OpenSSL, gdzie pliku szukać:

set OPENSSL_CONF=D:\Server\Apache24\conf\openssl.cnf

Jeżeli tego nie wykonamy, konieczne będzie wskazywanie ręczne pliku poprzez zmienną -config. Przechodzimy do generowania certyfikatu (opcja -config jest zamieszczona celem ilustracji poprzednich słów):

openssl.exe req -config ../conf/openssl.cnf -new -out test.csr -keyout test.pem

Większość pól możemy pominąć. Dwa kluczowe dla nas i obowiązkowe to PEM pass phrase – podajemy tutaj własne hasło, oraz Common Name – zawiera nazwę domeny czyli `test.local`. W efekcie, w folderze `bin` powstaną dwa nowe pliki: test.csr oraz test.pem. Następnym krokiem jest wygenerowanie klucza:

openssl.exe rsa -in test.pem -out test.key

Musimy podać hasło z pola PEM pass phrase. W wyniku powstanie kolejny plik test.key. Posłuży on do podpisania certyfikatu:

openssl.exe x509 -in test.csr -out test.crt -req -signkey test.key -days 365

Opcja `-days` mówi jak długo certyfikat ma pozostać ważny. Jeżeli nie chcemy zaprzątać sobie głowy ponownym generowaniem certyfikatu możemy tu podać kilka lat.

W tej chwili posiadamy już wszystkie niezbędne pliki. Do działania potrzebne będą dwa: test.crt, test.key. Możemy utworzyć nowy folder D:\Server\Apache24\certs i przegrać je do niego. Pozostałe dwa pliki możemy skasować lub zachować na później.

Następnym krokiem będzie poinformowanie serwera Apache, że host wirtualny `test.local` powinien być dostępny poprzez bezpieczne połączenie. Aby to zrobić, musimy zedytować plik vhostów czyli D:\Server\Apache24\conf\extra\httpd-vhosts.conf:

<VirtualHost *:443>
    SSLEngine On
    SSLCertificateFile "d:/Server/Apache24/certs/test.crt"
    SSLCertificateKeyFile "d:/Server/Apache24/certs/test.key"
    ServerName test.local  
    DocumentRoot "d:/Server/vhosts/test.local"
    ErrorLog "logs/test.local-error.log"
    CustomLog "logs/test.local-access.log" common
    <Directory "d:/Server/vhosts/test.local">
        Options Indexes FollowSymLinks MultiViews Includes ExecCGI
        AllowOverride All
        Order deny,allow
        Allow from all
    </Directory>
</VirtualHost>

W porównaniu do poprzedniej konfiguracji, dodaliśmy 3 nowe linie aktywujące silnik SSL. Zamieniliśmy też port 80 na 443 – domyślny dla połączeń HTTPS.

Ostatnie co pozostało to zmiany w globalnej konfiguracji serwera Apache. Otwieramy plik D:\Server\Apache24\conf\httpd.conf. Należy w nim odkomentować linię aktywującą mod_ssl:

LoadModule ssl_module modules/mod_ssl.so

Poniżej znajdziemy również sekcję dodatkowych opcji:

<IfModule ssl_module>
Listen 443
SSLRandomSeed startup builtin
SSLRandomSeed connect builtin
</IfModule>

Dodajemy tu `Listen 443` czyli informujemy serwer Apache że, w przypadku gdy aktywny jest moduł SSL, ma oczekiwać połączeń na porcie 443.

Restartujemy obowiązkowo serwer Apache. Jeżeli wszystko przebiegło prawidłowo, po odwiedzeniu strony https://test.local przeglądarka powinna wyświetlić standardowy komunikat z pytaniem, czy akceptujemy nasz certyfikat. Oczywiście dodajemy go do wyjątków.

O czym warto jeszcze wspomnieć to plik D:\Server\Apache24\conf\extra\httpd-ssl.conf. W dużej mierze zawiera on dyrektywy konfiguracyjne SSL z których już częściowo korzystaliśmy. Jeżeli wygodniej będzie Ci Czytelniku na nim pracować, lub potrzebujesz w jednym miejscu mieć wszystkie opcje modułu SSL warto go odkomentować w pliku httpd.conf:

Include conf/extra/httpd-ssl.conf

Pamiętaj jednak, że w postaci domyślnej będzie gryzł się trochę z naszą wcześniejszą konfiguracją.

Komentarze

Nie ma jeszcze żadnych komentarzy do wyświetlenia. Może chcesz zostać pierwszą osobą która podzieli się swoją opinią?

Dodaj komentarz

*
Nazwa zostanie wyświetlona wraz z komentarzem. Możesz też utworzyć nowe konto w serwisie, dzięki czemu uzyskasz dodatkową funkcjonalność.
*
Akceptowana jest ograniczona składnia Textile. Wszystkie tagi HTML zostaną usunięte.