1.Wprowadzenie
Apache-SSL poza funkcjami zwykłego Apache'a udostępnia możliwośćszyfrowania połaczenia z klientem przy pomocy SSL.Wykorzystuje się to wszędzie tam, gdzie przesyłane dane NIE MOGĄ być przechwycone przez osoby trzecie (czyli przy przesyłaniu poufnych danych, w tym haseł) odwołanie do serwera serwujacego witrynę w bezpiecznym połączeniu wygląda nastepujaco:https://www.domena.pl/, a połączenie jest kierowane na port 443 serweraw przeciwieśstwie do portu 80 przy połaczeniach nieszyfrowanych.
Więcej na ten temat znajdziesz na stronie www.apache-ssl.org .
2.Instalacja bazy MySQL
Po ściągnięciu bazy danych kopiujemy ją do katalogu /usr/local/src a później rozpakowujemy
# cp mysql-3.23.58.tar.gz /usr/local/src# cd /usr/local/src# tar zxf mysql-3.23.58.tar.gz# cd mysql-3.23.58
Teraz możemy zająć się konfiguracją, kompilacją i inicianizacją bazy
A. Konfiguracja
# ./configure --prefix=/usr/local/mysql --with-charset=latin2 B. Kompilacja
# make
C. Instalacja
# make install
UWAGA:umieść scieżkę /usr/local/mysql/lib/mysql w pliku /etc/ld.so.conf i odpal ldconfig, bo inaczej PHP sie nie odpali (czyli Apache nie wystartuje).
D. Inicjacja baz danych
# /usr/local/mysql/bin/mysql_install_db
Zostanie utworzony katalog: /usr/local/mysql/var wraz z bazami: mysql oraz testTrzeba jeszcze zmienić użytkownika i/lub prawa dostepu do tego katalogu:
# chown mysql /usr/local/mysql/var -R
E. Teraz możemy uruchomić naszą baze
# /usr/local/mysql/bin/safe_mysqld
I sprawdzamy czy działa
# /usr/local/mysql/bin/mysqladmin pingJeżeli zwróci nam wartość >mysqld is alive <= znaczy że działa
F. Instalacja skryptów startowych
# cp /usr/local/mysql/share/mysql/mysql.server /etr/rc.d/rc.mysql# echo "/etc/rc.d/rc.mysql start" >> /etc/rc.d/rc.local
G. Ostatnim krokiem bedzie ustawienie hasła administratora
# /usr/local/mysql/bin/mysqladmin -u root password tu_wpisz_nowe_hasło
H. Teraz możemy sprawdzić czy wszystko działa logujemy sie do bazy
# cd /usr/local/mysql/bin# ./mysql -u root -p(tu podajemy nasze hasło które ustawiliśmy wyżej)
3.Instalacja openSSL
I znów przenosimy nasze zródło do katalogu /usr/local/src/ i tam rozpakowujemy
# cp openssl-0.9.7c.tar.gz /usr/local/src# tar zxf openssl-0.9.7c.tar.gz
# ./config
B. Kompilacja
C. test
# make test
D. Instalacja
4.Generacja Certyfikatu dla naszej witryny
UWAGA: standardowo ważność wystawianego certyfikatu dla instytucji certyfikujacej, jak i zwykłego certyfikatu dla strony WWW to rok (365 dni) czyli jak wystawimy sobie certyfikat dla naszej instytucji certyfikujacej, a kilka minut pozniej certyfikat dla jakies witryny WWW, to ważność certyfikatu dla witryny będzie przekraczać termin ważności certyfikatu instytucji, która będzie wystawiać ten certyfikat ...MSIE wyrzuci wykrzyknik, że mu to nie odpowiada.
Aby temu zapobiec - zedytuj plik /usr/loca/openssl/ssl/misc/CA.sh i popraw linie nr 87.Jest tam:-out ${CATOP}/$CACERT $DAYSzamień te linie na:-out ${CATOP}/$CACERT -days 1024
wtedy certyfikat wystawiany dla instytucji certyfikującej będzie miał ważność około 3 lat, a ważnosć certyfikatów dla witryn pozostaje bez zmian - 1 rok....i już MSIE nie będzie się burzył (przynajmniej z tego powodu)
- Tworzymy certyfikat dla instytucji certyfikującej, którym to certyfikatem będzie można podpisywać certyfikaty dla witryn.Wydaj polecenie: (będąc dalej w /usr/local/openssl/ssl/misc)
# ./CA.sh -newca
skrypt zapyta się o nazwę pliku, w którym ma utworzyć certyfikat (kliknij - zostanie nadana domyślna nazwa)
następnie trzeba podać kilka danych, które będą zapisane w certyfikacie (kod kraju, województwo, miasto, nazwę Twojej instytucji, e-maila i takie tam), no i hasło,
Po zakończeniu działania skryptu zostanie utworzony katalog ./demoCAoraz kilka plików i podkatalogów.Nas będą interesować tylko pliki:
./demoCA/cacert.pem - certyfikat naszej instytucji certyfikującej./demoCA/private/cakey.pem - klucz prywatny powyższego certyfikatu
Tworzymy następnie certyfikat dla witryny internetowej (dla każdej witryny SSL-owej generuje się osobny certyfikat, ponieważ nazwa zawarta w certyfikacie musi się zgadzać z nazwą domenową strony internetowej, dla której tworzymy certyfikat. W przeciwnym wypadku ukochany MSIE rzuci wykrzyknikiem przy wejąciu na taką stronę, że "Nazwa zawarta w certyfikacie nie zgadza się z nazwą strony".Wydajemy polecenie:
# ./CA.sh -newreqpodajemy hasło, jakie chcemy mieć dla wygenerowanego klucza prywatnego,oraz kilka danych na temat certyfikatu. (jak poprzednio).
Uwaga: Ważne jest, aby przy 'Common Name (eg, Your Name) []:'podać nazwę domenową strony, dla której jest tworzony certyfikat.(w przeciwynym wypadku MSIE wyrzuci wyżej wspomniany wykrzyknik)
Zostanie utworzony plik ./newreq.pem, który trzeba "podpisać" w instytucji certyfikującej. Instytucji takich jest "kilka" na Inecie, ale za podpisanie takiego certyfikatu płaci się około 125 USD (mogę się mylić).Ale nie zawsze jest potrzeba posiadania certyfikatu wystawionego przez taką firmę, dlatego też możemy sami sobie podpisać swój certyfikat. (po to własnie wczęsniej utworzylismy certyfikat instytucji certyfikującej)
Więc podpisujemy nasz nowy certyfikat w (naszej) instytucji certyfikującej wydajac polecenia
# ./CA.sh -sign
Skrypt poprosi nas teraz grzecznie o hasło do klucza prywatnego instytucji certyfikującej, następnie dwa razy potwierdzamy "y" i dostajemy pikny podpisany certyfikat dla naszego sajta ;-) są nimi dwa pliki:
./newcert.pem - certyfikat dla strony internetowej./newreq.pem - klucz prywatny dla powyższego certyfikatu
Jeszcze tylko pomocne (opcjonalnie) może być usunięcie hasła z klucza prywatnego naszego certyfikatu, gdyż wtedy unikniemy pytania o hasło przy starcie apache-ssl'a.Hasło z klucza prywatnego usuwa się wydając polecenie:# $openssl rsa -in newreq.pem -out newreq.pem
czyli mamy 4 pliki, ktore nas interesuja z calego katalogu ./demoCA:./demoCA/cacert.pem - certyfikat naszej instytucji certyfikujacej./demoCA/private/cakey.pem - klucz prywatny naszej instytucji certyfikujacej./newcert.pem - certyfikat dla witryny internetowej./newreq.pem - klucz prywatny certyfikatu dla witryny
5.Instalacja serwera Apache-SSL
Kopiujemy zródła apache-1.3.28.tar.gz do /usr/local/src rozpakowójemy i patchujemy naszego apache
# cp apache-1.3.28.tar.gz# tar zxf apache-1.3.28.tar.gz# cd apache-1.3.28# cp apache-1.3.28+ssl_1.49.tar.gz /usr/local/src/apache-1.3.28# tar zxf apache-1.3.28+ssl_1.49.tar.gz# ./FixPatchzapyta nas o 2 rzeczy na pierwszą odpowiadamy nie 'N' a zaś drugą tak 'Y'' i apache zostaje spatchowany ;>
A. Konfiguracja # ./configure # --prefix=/usr/local/apache-ssl # --activate-module=src/modules/php4/libphp4.a# --enable-module=rewrite # --enable-shared=rewrite
D. Skrypty startowe
# cp /usr/local/apache-ssl/bin/httpsdctl /etc/rc.d/rc.httpsd# echo "/etc/rc.d/rc.httpsd start >> /etc/rc.d/rc.local"
Teraz już mamy apache-ssl z mysql ale jeszcze pozostał nam php więc do dzieła
6.Instalacja PHP
No i jak zwykle zródła do /usr/local/src
# cp php-4.3.4.tar.gz /usr/local/src# tar zxf php-4.3.4.tar.gz# cd php-4.3.4
# ./configure --prefix=/usr/local/php # --with-apxs=/usr/local/apache-ssl/bin/apxs # --enable-track-vars # --mysql=/usr/local/mysql # --with-config-file-path=/usr/local/apache-ssl/conf
Teraz należało by skopiować plik php.ini na swoje miejsce czyli do /etc
# cp /usr/local/src/php-4.3.4/php.ini-dist /etc/php.ini
7. Konfiguracja serwera Apache-SSL -> httpsd.conf
Mógłbym długo opisywać jak konfigurować apacha z obsluga SSL czy bez, ale postram tu naj najkrócej pokazać co gdzie wpisać zeby zadzialało wiec do dzieła ;)
Gotowy plik konfiguracyjny z obsluga SSL jest dostepny pod adresem http://krycha.gda.pl/linux/howto/httpsd.confuprzedzam iż najbardziej jak mogłem go skróciłem tzn pozbawiłem go zbędnych jak dla mnie komentarzy i odstępow pomiedzy wierszami więc ni jest super czytelny dla wszystkich ale grunt ze działa i jest sprawdzony - ale to dla tych którzy chcą mieć szybko zrobiony plik konfiguracyjny.
Domyślnie plik konfiguracyjny Apache ma nazwę httpsd.conf (niby słusznie), ale chłopaki zapomnieli więc spaczować fragment Apacha, by ten korzystał z pliku o takiej własnie nazwie - Apache-SSL odwołuje się do pliku httpd.conf przy uruchomieniu...którego nie ma.
Wiec tworzymy link symboliczny:# cd /usr/local/apahe-ssl/conf# ln -s httpsd.conf httpd.conf
i już Apache przy starcie nie będzie krzyczał z tego powodu ;-)
Teraz przechodzimy do edycji naszego apacha /usr/local/apache-ssl/conf/httpsd.conf
Na poczatku dodajemy poniższe linijki najlepiej przed dodaniem modułów
Potrzebne dla nasłuchiwania na tych portach 443 - jest standardowym portem dla SSL'aListen 80Listen 443
Potrzebne by załadować moduly dla php'aLoadModule rewrite_module libexec/mod_rewrite.so LoadModule php4_module libexec/libphp4.so
Teraz odnajdujemu sekcje gdzie dodawane są moduły i sprawdzamy czy na końcu mamy taki wpis jak nie to dopisujemy AddModule mod_php4.c
Teraz ustawiomy poniższe zmienne
Port 80User nobodyGroup nobodyServerAdmin admin@domena.plServerName domena.pl
No to na koniec nasze virtualki
NameVirtualHost *:80NameVirtualHost *:443Powyższe deklaracje MUSZĄ BYĆ. Wiele osób pomija je dziwiąc się potem,że poniższe konfiguracje Virtualek nie działają...
Teraz definiujemy virtualki z obsluga SSL'a
DocumentRoot /usr/local/apache-ssl/htdocs/jakis_katalog/ServerName domenazssl.plServerAlias www.domenazssl.plRedirect / https://www.domenazssl.pl:443/
ServerAdmin adimn@domenazssl.plDocumentRoot /usr/local/apache-ssl/htdocs/jakis_katalog/ServerName domenazssl.plServerAlias www.domenazssl.plErrorLog /usr/local/apache-ssl/logs/domenazssl-error_logCustomLog /usr/local/apache-ssl/logs/domenazssl-access_log commonSSLEnableSSLCACertificatePath /usr/local/apache-ssl/confSSLCACertificateFile /usr/local/apache-ssl/conf/ssl/cacert.pemSSLCertificateFile /usr/local/apache-ssl/conf/ssl/newcert.pemSSLCertificateKeyFile /usr/local/apache-ssl/conf/ssl/newreq.pemSSLCacheServerPort 8080SSLCacheServerPath /usr/local/apache-ssl/bin/gcacheSSLSessionCacheTimeout 10000RewriteEngine onRewriteCond %(REQUEST_METHOD) ^(TRACE|TRACK)RewriteRule .* - [F]
Dzięki takiemu rozwiązaniu chcąc wejsc na stronehttps://www.domenazssl.pl:500/,wystarczy, wpisać http://www.domenazssl.pl/,a serwer apache (bez obsługi SSL) przekieruje Cię na ten pierwszy adres. I już nie musisz martwić się zapamiętywaniem numerów portów dla witryn SSL, jeżli masz ich wiele.
A to virtualka bez obslugi SSL'a
ServerAdmin admin@domenabezssl.plDocumentRoot /usr/local/apache-ssl/htdocs/jakis_katalog/ServerName domenabezssl.plServerAlias www.domenabezssl.plErrorLog /usr/local/apache-ssl/logs/domenabezssl-error_logCustomLog /usr/local/apache-ssl/logs/domenabezssl-access_log commonSSLDisable
Jedyną (znaczącą) różnicą w konfiguracji Virtualek z SSL i bez SSL na tym samym Apache'u jest dyrektywa SSLEnable/SSLDisable.To własnie ta dyrektywa decyduje o tym, czy dana Virtualka ma być obsługiwana przez bezpieczny (jak narazie ;P) protokół SSL, czy też nie.
Na koniec sprawdzamy czy wszystko gra
# /etc/rc.d/rc.httpsd configtest jak nam zwroci wartosc "Syntax OK" oznacz ze jest git i możemy odpalac apache-ssl
# /etc/rc.d/rc.httpsd start
Jak by się pojawiły jakieś problemy zapraszam do logow - log fun !!! "/usr/local/apache-ssl/log/"
Skrypt konfiguracyjny dostepny pod adresem http://krycha.gda.pl/linux/howto/httpsd.conf
Oferus