My oczywiście nie będziemy kupować żadnego certfikatu dla własnych lokalnych potrzeb - zamiast tego skorzystamy z darmowego pakietu OpenSSL i taki certyfikat wygenerujemy oraz podpiszemy sobie sami. Wiąże się to z pewną małą "niedogodnością" - mianowicie przeglądarki będą pluły nam informacją o tym, iż nasz certfikat jest niezaufany i z niepewnych źródeł ;) Wystarczy jednak to zignorować.
OpenSSL
No to zaczynamy. Pierwszą sprawą jest zaopatrzenie się w darmowy pakiet OpenSSL, który pobierzemy stąd: http://indy.fulgan.com/SSL/. Na Linuxach pakiet ten powinien być dostępny domyślnie, dla Windowsów musimy go pobrać, zróbmy więc to. Wchodzimy na w/w stronę, pobieramy najnowszą dostępną wersję odpowiednią dla naszego systemu (32/64 bity) i rozpakowujemy, np. do:
- C:\OpenSSL
To jedna sprawa - druga to włączenie modułu SSL w samym Apache'u (jest on domyślnie wyłaczony). Otwieramy do edycji plik konfiguracyjny Apache'a (jako administrator):
- /ścieżka/do/apache/conf/httpd.conf
i szukamy linijki:
- LoadModule ssl_module modules/mod_ssl.so
Jeśli jest ona poprzedzona komentarzem (#) to usuwamy go.
Zapiszmy plik i zrestartujmy Apache:
- httpd -k restart
Uwaga - jeśli nie posiadamy modułu mod_ssl.so to bedziemy musieli go do naszego serwera doinstalować.
Klucz i certyfikat
Wróćmy do pobranego przez nas pakietu OpenSSL.Czeka nas wygenerowanie nowego certyfikatu.
Służy do tego narzędzie openssl, a jakże ;)
Na początku stworzymy sobie folder na nasz certyfikat i klucz, np.
- C:\certSSL
Uruchomijmy zatem terminal/konsolę (UWAGA: koniecznie jako administrator), a następnie stwórzmy powyższy folder i wejdżmy do niego:
- mkdir C:\certSSL
- cd C:\certSSL
Wpiszmy teraz w konsoli:
- openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout localhost.key -out localhost.cert
Rozpocznie się procedura generowania klucza.
Zostaniemy poproszeni o podanie danych takich jak kod naszego kraju, nazwa organizacji itd.
Wpiszmy tam jakieś podstawowe dane - zostaną one wpisane do certyfikatu.
Ważne jest jednak pole Common Name, określające adres strony dla jakiej wystawiamy certyfikat.
Jeśli wystawiamy dla naszego localhosta to wpiszmy tam:
- localhost
Jeśli wszystko poszło dobrze to powinniśmy w folderze C:\certSSL otrzymać 3 pliki:
- .rnd
- localhost.cert
- localhost.key
Plik .rnd usuwamy.
Interesują nas 2 pozostałe pliki:
- localhost.cert - czyli nasz certfikat
- localhost.key - nasz wygenerowany klucz prywatny
Instalacja klucza i certyfikatu
Oba pliki kopiujemy do katalogu z konfiguracją Apache'a:
- /ścieżka/do/apache/conf/ssl
(katalog ssl tworzymy sami)
V-HOST
Następnie będziemy musieli stworzyć nowego v-hosta (więcej o tworzeniu vhostów napisałem w tym artykule). Wchodzimy zatem do pliku z konfiguracją v-hostów, najczęściej jest to:
- /ścieżka/do/apache/conf/extra/httpd-vhosts.conf
i dodajemy nowego wirtualnego hosta, np:
- <VirtualHost *:443>
- ServerAdmin nasz@email.com
- DocumentRoot "c:/www"
- ServerName localhost
- ServerAlias localhost
- SSLEngine On
- SSLCertificateFile conf/ssl/localhost.cert
- SSLCertificateKeyFile conf/ssl/localhost.key
- ErrorLog "logs/localhost-ssl-error.log"
- CustomLog "logs/localhost-ssl-access.log" common
- </VirtualHost>
Jak widzimy w konfiguracji - połączeń po SSL nasłuchiwać będziemy na porcie 443
DocumentRoot pozostaje bez zmian, ale możemy tutaj podać oddzielny katalog na zawartość przesyłaną po https://.
To co najbardziej rzuca się w oczy, to:
- SSLEngine On
- SSLCertificateFile conf/ssl/localhost.cert
- SSLCertificateKeyFile conf/ssl/localhost.key
To właśnie tutaj uruchamiamy SSL dla tego v-hosta oraz definiujemy ścieżki do certfyfikatu i klucza.
httpd.conf
V-hosta już mamy, ale to jeszcze nie wszystko, gdyż teraz w zależności od obecnej konfiguracji naszego Apache'a dalsza procedura moze być różna. Najlepiej wyszukajmy w pliku httpd.conf wszystkie wystąpienia słowa SSL i przyjrzyjmy się jakie elementy odnośnie SSL są implementowane.Kluczowym jest, abyśmy dodali w konfiguracji następujący wpis:
- Listen 443
- <IfModule ssl_module>
- SSLRandomSeed startup builtin
- SSLRandomSeed connect builtin
- </IfModule>
Pierwsza linijka nakazuje Apachowi nasłuchiwania na porcie 443 - bez niej nasz serwer nie przyjmie żadnego połaczenia po protokole HTTPS.
Kolejne parametry definiują rodzaj generowanego ziarna za pomocą liczb losowych.
https://
Jeśli wszystko poszło zgodnie z planem, to zrestartujmy serwer i spróbujmy dostać się do naszego localhosta za pomocą:
- https://localhost
Jeśli wszystko poszło jak należy, pominniśmy zostać na wstępie poinformowani o niepewnym pochodzeniu naszego certyfikatu, samo zaś połączenie po SSL powinno w tym momencie działać.
ja mam w pracy u siebie serwer ale na całe szczęście tymi rzeczami zajmuje się mój informatyk. Ja za to mogę bez problemu pracować na systemie ERP https://www.connecto.pl/system-erp-do-zarzadzania-firma/ który moim zdaniem jest bardzo dobrym systemem.
OdpowiedzUsuńBardzo fajny artykuł. Jestem pod wrażeniem.
OdpowiedzUsuń