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:[code]C:\OpenSSL[/code]
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):
[code]/ścieżka/do/apache/conf/httpd.conf[/code]
i szukamy linijki:
[code]LoadModule ssl_module modules/mod_ssl.so[/code]
Jeśli jest ona poprzedzona komentarzem (#) to usuwamy go.
Zapiszmy plik i zrestartujmy Apache:
[code]httpd -k restart[/code]
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.
[code]C:\certSSL[/code]
Uruchomijmy zatem terminal/konsolę (UWAGA: koniecznie jako administrator), a następnie stwórzmy powyższy folder i wejdżmy do niego:
[code]mkdir C:\certSSL
cd C:\certSSL[/code]
Wpiszmy teraz w konsoli:
[code]openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout localhost.key -out localhost.cert[/code]
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:
[code]localhost[/code]
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:[code]/ścieżka/do/apache/conf/ssl[/code]
(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:[code]/ścieżka/do/apache/conf/extra/httpd-vhosts.conf[/code]
i dodajemy nowego wirtualnego hosta, np:
[code]
<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>
[/code]
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:
[code]
SSLEngine On
SSLCertificateFile conf/ssl/localhost.cert
SSLCertificateKeyFile conf/ssl/localhost.key
[/code]
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:
[code]
Listen 443
<IfModule ssl_module>
SSLRandomSeed startup builtin
SSLRandomSeed connect builtin
</IfModule>
[/code]
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ą:[code]https://localhost[/code]
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ń