|
wersja 0.9 |
|
Spis treści |
Wstęp Zaczynamy 1) OpenSSL 2) mod_ssl 3) Apache Co dalej ? Posłowie |
| Wstęp |
W dokumencie tym starałem się jak najdokładniej opisać skonfigurowanie Apacza wraz z SSL. Nikomu nie muszę chyba wyjaśniać "ta na co to wszystko". Rosnąca popularność wszelkiego rodzaju rzeczy dostępnych przez www wraz z jeszcze bardziej rosnącym lenistwem ludzi powoduje, że nawet sprawdzanie poczty użytkownicy chcą mieć przez www. Tu się pojawiają hasła, sniffery, niezabezpieczony http, itp. Jeszcze pare słów wyjaśnienia, co tutaj opisuje ;). Współpracę Apacza i SSL możemy skonfigurować (o ile mi wiadomo) na dwa sposoby: (1) Apache + apache_ssl lub (2) Apache + mod_ssl. Sposób pierwszy polega na wkompilowaniu SSLa do Apacza, jest cholernie zagmatwane i zalecane, gdy serwer jest naprawdę obciążony. Drugi sposób, ten, który opisuję, jest nieznacznie wolniejszy, ale o wiele szybciej i łatwiej go zmajstrować. Cały problem polega na tym, że samo tworzenie kluczy, certyfikatów itp. jest dość skomplikowane i opis tego zajmie jakieś 80% właściwej treści tego dokumentu. Natomiast samo skonfigurowanie Apacza jest stosunkowo proste. Rada dla Ciebie: jeśli przekopiesz się, i zaskoczysz opis openssl'a, z Apaczem nie powienieś mieć problemu i co lepsze: będziesz mógł produkować klucze i certyfikaty ile dusza zapragnie. No i jeszcze jedno: zrezygnowałem tutaj z opisu gotowych skryptów programu OpenSSL, wszystko będziemy robić ręcznie. Jeszcze mi za to podziękujesz ;) Dobra, koniec tego przydługiego wstępu. Podziękowania dla autorów prac, którymi sobie pomagałem: Tym, Seeb, M. Malessa - THX !. |
| Zaczynamy |
Najważniejsze rzeczy, które potrzebujemy:
apache-1.3.27 (ostatnia dostępna wersja) mod_ssl-2.8.14-1.3.27 (ostatnia wersja mod_ssl do ostatniego Apacza :) openssl-0.9.7b (ostatnia dostępna wersja) Ja zrobiłem to tak: wywaliłem swojego starego Apacza z dysku, nie zostało po nim ani śladu, wcześniejszą wersję openssl'a też wyrzuciłem. Nie pozostało mi nic. Najlepiej by było, żebyś skopiował swoje configi i strony www w jakieś miejsce i wszystko wywalił. Tak czy inaczej, Apacza trzeba będzie od nowa skompilować. To co tutaj opisuje testowałem na Slacku 8.0. Teraz wrzucamy sobie wszystko do jakiegoś katalogu z instalkami. U mnie tak: /root/Temp/ i tutaj wrzuciłem wszystkie trzy spakowane pliki. Nadszedł już czas, żeby je wszyskie rozpakować. Po wydaniu odpowiednich poleceń, mam: /root/Temp/mod_ssl-2.8.14-1.3.27/ /root/Temp/apache_1.3.27/ /root/Temp/openssl-0.9.7b/ Żeby nie odpowiadać na "niepoważne" e-maile, zakładam, że wszystko robię jako użytkownik root. Bardziej zaawansowani (normalni:) użytkownicy będą wiedzieli kiedy przłączać się na roota i czynności konfiguracyjne będą robili jako zwykły user. W ten sposób oszczędzam swoje nerwy i Twój czas. Mam nadzieję, że wiesz o co mi chodzi w tym momencie. |
| 1) OpenSSL |
Dobra, miejmy to z głowy... Sama konfiguracja, kompilacja i instalacja jest prosta. Jeśli interesują Cię szczegóły - odsyłam do pliku INSTALL. cd /root/Temp/openssl-0.9.7b/ ./config make make test make install Domyślnym katalogiem, w którym zostaną zainstalowane nasze pliki jest /usr/local/ssl/. Warto po instalacji dopisać: - do /etc/profile, do zmiennej PATH: "....:/usr/local/ssl/bin" Żeby zaczęło to działać, należy się wylogować i zalogować ponownie. W każdym razie dobrze jest mieć plik "openssl" w każdym momencie dostępny. - do /etc/ld.so.conf dopisać: "/usr/local/ssl/lib". Następnie wydajemy komendę "ldconfig". - zaleca się także stworzenie linku symbolicznego w /usr/local/: ln -s ssl openssl Okey. Kompilacja trwa dłuższą chwilę (przynajmniej na P133) dlatego robimy sobie teraz przerwę na papierosa... Dobra. Zaczynamy prawdziwą zabawę. To zdecydowanie najbardziej zamotana część tego dokumentu, jeśli ją przetrwasz - reszta pójdzie szybko. Z grubsza sprawa wygląda tak: potrzebujmemy certyfikat dla naszej strony www. Tak więc możemy go sobie wygenerować. Składa się na to wygenerowanie klucza prywatnego oraz prośby o certyfikat "podpisanej" przez ten klucz. Następnie ta prośba powinna zostać zautoryzowana, podpisana, przez odpowiednią organizację certyfikującą. Z tym nie ma problemu gdy masz kasę. W naszym wypadku sami staniemy się organizacją certyfikującą (CA) dla siebie. To z kolei wymaga wygenerowania klucza prywatnego dla organizacji certyfikującej oraz certyfikatu dla niej. Tym właśnie certyfikatem organizacja certyfikująca podpisuje "prośby o certyfikat" dla stron www. Tak więc po kolei. Najpierw staniemy się organizacją certyfikującą (CA). Potrzebujemy, jak wcześniej wspomniałem klucza prywatnego CA oraz certyfikatu. Zakładam, że nasze certyfikaty i klucze będziemy trzymać w katalogu /etc/ssl/, jeśli go nie masz, utwórz go sobie. Dobra, przystępujemy do generowania klucza CA. Jeszcze jedno: klucze standardowo mają rozszerzenie .key. cd /etc/ssl openssl genrsa -des3 -out ca.key 1024 W ten sposób utworzyliśmy prywatny klucz, ca.key, dodatkowo zaszyfrowany hasłem, instytucji certyfikującej. Hasło musimy zapamiętać i nie może być zbyt proste. Jeszcze raz zwracam uwagę na fakt, że nasz klucz prywatny jest zaszyfrowany. Teraz musimy sobie wygenerować właściwy certyfikat CA. Będzimy proszeni o wpisanie hasła do klucza prywatnego CA. Wszystko, co wpiszemy później to dane identyfikacyjne CA - będą te rzeczy do wglądu poprzez strone www. Dlatego wpisujmy rzeczy sensowne, popuszczając jednocześnie wodzę fantazji :) openssl req -new -x509 -key ca.key -out ca.crt -days 1024 Otrzymaliśmy w ten sposób plik ca.crt, który jest właściwym certyfikatem CA (do podpisywania innych). Podsumowując - mamy pliki ca.key czyli klucz prywatny certyfikatu oraz ca.crt - właściwy certyfikat. Certyfikaty mają rozszerzenie .crt. Kolejna uwaga: Nasz certyfikat instytucji ma ważność 1024 dni, certyfikaty, które będziemy podpisywać nie mogą mieć ważności dłuższej, niż sam certyfikat CA. No i jeszcze ważna sprawa: plikom ca.* dajemy chmod 400: chmod 400 ca.key ca.crt Jeszcze jeden rodzaj rozszerzeń - .csr - są to "prośby o certyfikat". Podpisuje się je certyfikatem CA i wtedy stają się ona właściwymi certyfikatami np. www. Taki stworzymy dla nas. Przy okazji: csr to Certificate Signing Request. Teraz stworzymy dla naszej strony www, dla naszego Apacza, klucz prywatny oraz certyfikat (dokładnie: plik .csr, kandydat na certyfikat). Robimy: openssl genrsa -des3 -out server.key 1024 Hasło należy zapamiętać, będzie ono potrzebne np. przy starcie Apacza z SSL. Gdy mamy już klucz prywatny, pozostało wygenerować .scr, który później sobie uwierzytelnimy: openssl req -new -key server.key -out server.csr Jako 'extra' atrybuty nic nie wpisujemy, naciskamy enter(ek). Podajemy hasło, które przed chwilą sobie ustawiliśmy a następnie dane naszej firmy, naszej strony www. W tym miejscu najważniejsze: w polu Common Name: wpisujemy adres http strony, pod którą będzie działał (np. www.serwerek.pl). W pliku, który powstał (server.csr), znajduje się "certificate request". To mówi chyba samo za siebie. Podsumowując: mamy certyfikat CA (ca.crt), którym zaraz podpiszemy "prośbę" o certyfikat (server.csr). Dwa hasła które mamy (dostęp do plików ca.key i server.key będą potrzebne: pierwszy przy podpisywaniu "prośby" a drugi w momencie startu Apacza z SSL. Czyli pliki ca.* należą do instytucji certyfikującej a pliki server.* należą do Apacza. Teraz ważna uwaga: teoretycznie podpisać "prośbę" można ręcznie, z linii poleceń korzystając z "openssl ca.....[rozne parametry]" ale to spowoduje, że Internet Explorer będzie zwracał błąd "Nie znaleziono serwera". W samej dokumentacji mod_ssl napisano na ten temat: ""openssl ca" has some strange requirements and the default OpenSSL config doesn't allow one easlily to use "openssl ca" directly.". W każdym samo podpisanie musimy zrobić przy pomocy skryptu znajdującego się w kodzie źródłowym mod_ssl'a (u mnie: /root/Temp/mod_ssl-2.8.14-1.3.27/pkg.contrib/). Tak więc kopiujemy wszystkie nasze pliki właśnie tam: cp ca.crt ca.key server.csr server.key /root/Temp/mod_ssl.../pkg.contrib/ cd /root/Temp/mod_ssl.../pkg.contrib/ ./sign.sh server.csr Taa... Teraz musimy podać hasło klucza prywatnego CA (to pierwsze hasło). Wyświetlone zostaną dane strony, którą chcemy podpisać. Przypominam, że w miejscu Common Name powinien być widoczny adres http strony, dla której klucz podpisujemy. Jeśli jest o.k. naciskamy 'y' (chyba dwa razy) i powstaje nam plik: server.crt. To właśnie o to chodziło nam od początku. Dla Apacza potrzebne będą dwa pliki: plik z kluczem dla www (server.key) oraz plik z certyfikatem dla www (server.crt). Teraz spokojnie kasujemy pliki ca.* (z katalogu pkg.contrib): rm ca.crt ca.key oraz tworzymy sobie katalog /etc/ssl/apache i wrzucamy tam dwa pliki: mkdir /etc/ssl/apache mv server.key /etc/ssl/apache mv server.crt /etc/ssl/apache Prawdę mówiąc nie ma znaczenia, gdzie umieścimy powyższe pliki: Apacz po skonfigurowaniu skopiuje je do swojego kodu źródłowego: do podkatalogów conf/ssl.key/server.key oraz conf/ssl.crt/server.crt. Zostawiamy je jednak dodatkowo w /etc/ssl/apache/. Okej. Teraz możemy wykasować pliki /etc/ssl/server* - nie są nam już potrzebne (to, czego potrzebujemy jest w /etc/ssl/apache). cd /etc/ssl rm server* Teraz czas na "mod_ssl". Tu już będzie z górki. |
| 2) mod_ssl |
Cały czas zakładam, że jesteśmy w /root/Temp/mod_ssl-2.8.14-1.3.27/ Sprawa jest prosta. Jeśli chcesz więcej szczegółów konfiguracyjnych - odsyłam do pliku INSTALL. Wydajemy polecenie (pamiętaj o swoich ścieżkach): ./configure --with-apache = ../apache_1.3.27/ --with-crt = /etc/ssl/apache/server.crt --with-key = /etc/ssl/apache/server.key Tak, to wszystko w jednej linii. Teraz chyba nie muszę wyjaśniać co jest czym :) He, he... to wszystko tutaj. |
| 3) Apache |
Wchodzimy teraz do katalogu z kodem źródłowym Apacza. W jednej linii piszemy: SSL_BASE=../openssl-0.9.7b ./configure --enable-module=ssl --prefix=/usr/local/apache --[różne inne Twoje opcje] Tak jest, w jedej linii. Możesz dorzucić różne swoje opcje, np. coś z PHP, MySQL itp. Oczywiście uważaj na ścieżki dostępu. Apacz spokojnie się configuruje... Teraz pozostało: make i make install. Teraz możemy plikom pozostawionym w /etc/ssl/apache/ dać chmod 400 : cd /etc/ssl/apache/ chmod 400 * Powinniśmy także wywalić pliki server* z kodu źródłowego Apacza - jeśli kod ten sobie zostawiamy... cd /root/Temp/apache_1.3.27/ rm conf/ssl.crt/server.crt rm conf/ssl.key/server.key |
| Co dalej ? |
Jesteś szczęśliwym posiadaczem Apacza z SSL. Nie wiesz jeszcze tylko czy działa. W odpowiednim katalogu (u mnie /usr/local/apache/bin/) są odpowiednie pliki, aby to sprawdzić. Na początek jeszcze kilka uwag:
Dobra, co jeszcze... To cholerne hasło na początku. Wiem, niepotrzebny kłopot. Żeby je wywalić, wchodzisz do katalogu z kluczem prywatnym serwera www: cd /usr/local/apache/conf/ssl.key/ cp server.key server.key.old openssl rsa -in server.key.old -out server.key chmod 400 server.key W ten sposób nie będziemy pytani o hasło przy starcie Apacza. Pamiętaj o chmod 400 server.key. Dobra, to by bylo chyba wszystko. Mam nadziję, że udało się tobie zrobić to, z czym ja walczyłem 2 bite dni, w o wiele krótszym czasie. Bez obrazy, ale prosze nie przysyłać do mnie pytań o parametry w pliku httpd.conf dotyczące SSL. Wszystko znajduje się w dokumentacji mod_ssl a ja ostatnio nie mam na nic czasu. Dlatego nie obrażaj się, jeśli nie odpowiem na Twój list. Może jeszcze na koniec... 1. Jak uruchomisz Apacza z SSL, po wydaniu polecenia ps x powinieneś zobaczyć m.in. /usr/local/apache/bin/httpd -DSSL. Jeśli nie będzie tego -DSSL, zapewne wpisałeś "apachectl start" zamiast "apachectl startssl". 2. Polecenie netstat -a |more powinno pokazać tobie przy uruchomionym Apaczu z SSL zajęte (nasłuchujące) porty www(80) i https(443). 3. Zawsze możesz wykonać telnet localhost 443 i jeśli nie zostaniesz odrzucony - coś tam siedzi na nim. Ciekawe co :) 4. Bardzo fajny sposób żeby sprawdzić czy SSL jest ok. to: openssl s_client -connect localhost:443 -state -debug |
| Posłowie |
Jest to pierwsza wersja tego dokumentu i zawiera pewnie jakieś błędy/niedoróbki/potknięcia itp. Będę bardzo wdzięczny za wszelkie uwagi, komentarze, poprawki, wyrazy wdzięczności. Z góry przepraszam za powyższe i mam nadzieję, że będziecie mnie informować w których miejscach coś nie gra. Jako (częściowe) wytłumaczenie przedstawiam fakt, że większość tej pracy powstawała w późnych godzinach nocnych. Ostatnia wersja tego dokumentu znajduje się pod niżej wymienionym adresem. Kontakt ze mną: linio@terramail.pl Wesprzyj finansowo autora - kliknij tutaj |
|
=============================== Henryk Liniowski, Poznań 2003 http://linio.terramail.pl =============================== |