eRIZ’s weblog

PHP, webdesign, Linux, Windows i inne, bo nie samym chlebem człowiek żyje
Serdecznie zapraszam do udziału w ANKIECIE

Apache 2.2 pod Windows z SSL

Wcześniej pisałem o instalowaniu Apache. Ok, (chyba) działa, ale nie ma opcji zestawiania połączeń poprzez SSL. Dzisiaj zajmiemy się instalacją wersji obsługującej połączenia szyfrowane.

Tak naprawdę, cała czynność nie jest szczególnie trudniejsza od tej, do której zalinkowałem. Jeśli wszystko ruszyło z kopyta w wersji bez SSL, można powiedzieć, że instalacja wersji obsługującej szyfrowanie okaże się banalna. ;)

Zaznaczam, że metoda ta raczej nie przyda się do celów produkcyjnych - ot, podstawowa działająca wersja, obsługująca globalne certyfikaty. Co to oznacza? Ano, że wszystkie hosty obsługiwane przez jeden demon będą korzystały z jednego certyfikatu. Z czym się “jedzą” certyfikaty? Zapraszam do lektury odpowiedniej strony w Wikipedii.

W olbrzymim skrócie - do każdej domeny przypisywany jest certyfikat, a jeśli dane się nie zgadzają - przeglądarka wyświetli stosowne ostrzeżenie.

ostrzeżenie przeglądarki

W tym artykule opiszę, jak skonfigurować Apache do obsługi protokołu szyfrowanego z użyciem własnoręcznie wygenerowanego certyfikatu. W celach produkcyjnych należy zaopatrzyć się w tzw. certyfikat kwalifikowany, to znaczy - wystawiony przez jakąś firmę tym procederem (:P) się trudniącą. Wówczas przeglądarka nie będzie wyświetlała ostrzeżenia przed niezaufanym certyfikatem. Oczywiście, taka impreza kosztuje, jest to swego rodzaju biznes, w który jest bardzo ciężko (o ile w ogóle się da) wkręcić, gdyż przeglądarki zawierają wpisy tych największych wystawców, a dodanie nowego wymagałoby, w zasadzie, użycia wehikułu czasu. Kiedyś wydanie certyfikatu kosztowało krocie (nawet kilkaset złotych rocznie), teraz nie jest to już taki problem. Po frazie tanie certyfikaty SSL w Google można znaleźć wiele ofert, dość popularne są GoDaddy, czy RapidSSL.

Często bywa tak, że firmy hostingowe pośredniczą w sprzedaży certyfikatów i nieraz oferty polskich resellerów są tańsze niż bezpośrednie kupno u wydawcy. Warto poszperać, popytać. ;)

Ok, ok, rozgadałem się, nie o tym miało być.

wybór drogi

Dlaczego od razu rozjazd? Przecież można wygenerować certyfikat na samym początku. Ok, można, ale potrzebujemy przecież narzędzia. ;) Nie każdy posiada OpenSSL zainstalowane fabrycznie, trochę trzeba się nieraz pomęczyć. Apache dla Windows jest publikowane w dwóch wersjach - no_ssl i openssl. Ten pierwszy nie posiada praktycznie niczego, co jest nam niezbędne do uaktywnienia szyfrowania. Jeśli mamy certyfikat, większa część drogi za nami, ale pojawia się poważny problem - potrzebujemy mod_ssl, którego raczej nikt nie udostępnia w binarkach, a źródła mało kto zechce sobie kompilować. Za to wersja openssl udostępnia pełen warsztat i wystarczy odkomentować dosłownie kilka linijek w plikach konfiguracyjnych, aby wszystko zaczęło działać. Komfortowy przypadek opiszę od razu. ;)

Apache z OpenSSL

Jak zainstalować Apache z PHP pod Windows już pisałem, posadzenie paczki z obsługą SSL wcale nie będzie inne. Pakiet zawiera po prostu narzędzie do wygenerowania certyfikatu oraz moduł zajmujący się połączeniami szyfrowanymi. Paczkę można pobrać ze strony pobierań projektu, ściągamy plik z openssl przy końcu nazwy. Instalacja przebiega identycznie, jak w moim poprzednim artykule.

Gdy już wszystko działa, It works! dumnie ukazuje się w przeglądarce właściwie pozostaje już tylko generowanie/instalacja certyfikatu i pogrzebanie w konfiguracji. O tym dalej, gdyż etap ten - pomijając instalację dodatkowych narzędzi - jest niemalże identyczny, co w wersji bez OpenSSL.

Apache bez bibliotek SSL

Zdobycie narzędzia generującego certyfikaty i odpowiednich bibliotek nie będzie stanowiło problemu - wszystko można pobrać ze strony organizacji opiekującą się binariami dla Windows. Instalujemy i teoretycznie powinno wystarczyć. Jest jednak dość zawiły do obejścia problem - zdobycie pliku mod_ssl.so w postaci skompilowanej jest praktycznie niemożliwe. Osobiście nie znalazłem osobno, wyciągnąłem z paczki z SSL, podzielę się nim, no problem. ;) Po ściągnięciu, wystarczy rozpakować moduł do katalogu modules serwera i można iść dalej. Nie będzie to zawsze aktualna wersja, w chwili pisania tego tekstu gwizdnąłem go z binarki wersji 2.2.11. Wszystkie narzędzia już mamy, jedziemy dalej.

Generowanie certyfikatu

Zazwyczaj sytuacjs przedstawi się tak, że nie będziemy posiadali certyfikatu, trzeba go więc wygenerować samodzielnie. Otwieramy wiersz poleceń (cmd), przechodzimy do katalogu, w którym znajduje się binarka openssl (w przypadku Apache z SSL - \Apache2.2\bin, samodzielne OpenSSL - \OpenSSL\bin) i klepiemy dwa polecenia:

  1. openssl genrsa > server.pem
  2. openssl req -new -x509 -sha1 -days 365 -config ..\conf\openssl.cnf -key server.pem > server.crt

I teraz mała legenda. Jeśli korzystamy z osobnej instalki OpenSSL, to parametr -config ..\conf\openssl.cnf sobie darujemy. Plik jest w tym katalogu, więc nie ma problemu. ;)

Kopiujemy teraz pliki server.pem i server.crt do katalogu conf naszej instalki Apache.

Aha, z tego powodu, iż certyfikat jest własnej produkcji, przeglądarki będą ostrzegać odpowiednim okienkiem przy każdej sesji. W np. Operze można “zaufać” certyfikatowi przerzucając się na drugą zakładkę w okienku ostrzeżenia i zaznaczając odpowiednią opcję.

niezaufany certyfikat

Konfiguracja

Teraz już wspólnie dla obu wersji. Otwieramy w notatniku plik conf/httpd.conf. I namierzamy linijki:

  1. #LoadModule ssl_module modules/mod_ssl.so
  2. #Include conf/extra/httpd-ssl.conf

I usuwamy # z początku linijek. Restart Apache… I po wpisaniu https://127.0.0.1 powinniśmy ujrzeć dumnie brzmiące It works!.

Finito

Po kliknięciu odpowiedniej ikonki w przeglądarce można się upewnić, że transmisja jest faktycznie szyfrowana:

informacje o szyfrowaniu

Przedstawiłem najprostszy sposób na uaktywnienie szyfrowanej transmisji SSL pod Apache. Nie jest to, oczywiście, ideał, ale 256-bitowy AES powinien zadowolić nawet najbardziej przeczulonych na punkcie prywatności. Fakt, certyfikat nie należy do najbezpieczniejszych, ale sama transmisja powinna być - na chwilę obecną, oczywiście - niepodsłuchiwalna. :)

Wiadomo, do celów produkcyjnych jest to bardzo wstępny opis, ale na własne potrzeby, czemu nie? ;) Zapraszam do dyskusji.

6 komentarzy

dopisz swój :: trackback :: RSS z komentarzami

RSS z komentarzami :: trackback

Skomentuj

Możesz używać znaczników XHTML. Dozwolone są następujące tagi: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <code> <em> <i> <strike> <strong>

Wszystkie komentarze przechodzą przez moderację oraz filtry antyspamowe. Nie zostanie opublikowany komentarz, jeśli:

  • Jego treść obraża kogokolwiek.
  • W treści znajdują się wulgaryzmy i słownictwo ogólnie uznane za nieprzyzwoite.
  • Mam wątpliwości co do autora wpisu (Wszelkie anonimy są kasowane - niezależnie od zawartości - wpisz prawdziwy e-mail. Jeśli usunąłem, Twoim zdaniem, komentarz niesłusznie - daj znać). Zdarza się, iż sprawdzam kim jest komentujący.
  • Zawiera jakąkolwiek formę reklamy.

Szufladka