Apache + ssl + MySQL + php

W tym miejscu zapraszamy Was do współpracy. Czekamy na propozycje, sugestie i rady.
Moderatorzy zatroszczą się o to, by najlepsze teksty trafiły do FAQ.

Moderatorzy: Moderatorzy, Administratorzy

Awatar użytkownika
xil
Moderator
Posty: 861
Rejestracja: 2004-06-20, 22:20
Lokalizacja: Białystok
Kontakt:

Apache + ssl + MySQL + php

Post autor: xil » 2005-07-25, 15:22

Przydatne linki:
http://www.openssl.org/
http://www.modssl.org/
http://www.apache.org/
http://www.php.net/

Spis treści:
I. Wstęp
II. SSL
III. Certyfikaty dla www
IV. Konfiguracja mod_ssl
V. Wstępna konfiguracja Apache
VI. Konfiguracja i kompilacja php
VII. Kompilacja Apache
VIII. Plik httpd.conf oraz skrypty startowe


I. Wstęp

MySQL binarki ściągamy i instalujemy zgodnie ze wskazówkami w pliku INSTALL po rozpakowaniu programu. Opis jest naprawdę dobry i zwięzły, więc nikomu nie powinno to sprawić problemów.
Następnie należy ściągnąc najnowszą wersje źródęł apacha i php. Obie rozpakowujemy w katalogu `/usr/local/src`.
Następnie, aby było łatwiej w kat `/usr/local/src` wydajemy dwa polecenia tworzące dowiązania:

Kod: Zaznacz cały

ln -s apache-1.3.29 apache
ln -s php-4.3.3 php

Dalsze rozważania i ścieżki będą już podawane z uwzględnieniem tych symlinków.

Zakładam również, że MySQL został zainstalowany w kat: `/usr/local/mysql`.

Ściągamy i rozpakowujemy mod_ssl do katalogu `/usr/local/src/mod_ssl-2.8.16-1.3.29`.
Tutaj jest mod_ssl w wersji 2.8.16 dla apache w wersji 1.3.29. Zmiany dla nowszych wersji mile widziane.

Struktura katalogów wygląda teraz tak:

Kod: Zaznacz cały

/usr/local/src/apache
/usr/local/src/apache-1.3.29
/usr/local/src/php
/usr/local/src/php-4.3.3
/usr/local/src/mod_ssl-2.8.16-1.3.29

II. SSL

Ściągamy openssl, rozpakowujemy je w katalogu `/usr/local/src`, tworzymy dowiązanie:

Kod: Zaznacz cały

cd /usr/local/src
ln -s openssl-0.9.6l ssl

konfigurujemy,instalujemy i tworzymy dodatkowe dowiązanie dla katalogu wynikowego o nazwie openssl:

Kod: Zaznacz cały

cd /usr/local/src/openssl-0.9.6l
./config shared
make
make test
make install

cd /usr/local
ln -s ssl openssl

Należy dodać wpis w `/etc/ld.so.conf` o postaci "/usr/local/ssl/lib", po czym uruchomić polecenie `/sbin/ldconfig`.
Należy zmodyfikować plik `/etc/profile`. Do zmiennej PATH dodajemy: "....:/usr/local/ssl/bin".
Przykładowy wpis może więc wyglądać tak:

Kod: Zaznacz cały

# Set the default system $PATH:
PATH="/usr/local/bin:/usr/bin:/bin:/usr/X11R6/bin:/usr/local/ssl/bin"

Jednak miałem problem z tym (dokładniej z `su`), zrobilem więc sobie delikatne wsparcie modyfikując `/root/.bashrc` i dopisując w nim coś takiego:

Kod: Zaznacz cały

export PATH=$PATH:/usr/local/ssl/bin

III. Certyfikaty dla www

Podejście jest proste: sami tworzymy instytucję certyfikującą (taką jak np Thawte) i sami sobie podpiszemy certyfikaty dla strony. Przy otwieraniu tak podpisanej strony pojawi się ostrzeżenie, ale cóż, nie płacimy przecież za to ani grosza...
Tworzymy katalog `/etc/ssl` dla potrzeb kluczy, certyfikatów itd:

Kod: Zaznacz cały

mkdir /etc/ssl
cd /etc/ssl
1) Instytucja certyfikująca (klucz prywatny instytucji `ca.key`):

Kod: Zaznacz cały

openssl genrsa -des3 -out ca.key 1024 
2) Instytucja certyfikująca (certyfikat do podpisywania danych `ca.crt`):

Kod: Zaznacz cały

openssl req -new -x509 -key ca.key -out ca.crt -days 1024
Trzeba przy tych krokach podać hasło i inne bzdety. Ogólnie, można to wypełnić czym chcemy, ale przyda się podanie prawdziwych danych, takich jak przy certyfikacie www naszej - ładniej popatrzeć na ostrzeżenie, wyrzucone przy uwierzytelnianiu strony w przeglądarce ;-)

3) Zabezpieczenie kluczy:

Kod: Zaznacz cały

chmod 400 ca.key ca.crt
4) Klucz prywatny naszej strony (`a4.key`): //ps. a4 to nazwa mojego serwerka, wiec klucz a4.key

Kod: Zaznacz cały

openssl genrsa -des3 -out a4.key 1024 
5) Certyfikat dla naszej strony, a raczej prośba o autoryzację(`a4.csr`):
UWAGA na NAME!!! - pełny adres naszej strony!

Kod: Zaznacz cały

openssl req -new -key a4.key -out a4.csr
6) Uwierzytelnienie naszego certyfikatu przez instytucję (hihi też naszą):

Kod: Zaznacz cały

cp ca.crt ca.key a4.csr a4.key /usr/local/src/mod_ssl-2.8.16-1.3.29/pkg.contrib
cd /usr/local/src/mod_ssl-2.8.16-1.3.29/pkg.contrib
./sign.sh a4.csr

Dla Apacza potrzebne będą dwa pliki: plik z kluczem
dla www (a4.key) oraz plik z certyfikatem dla www (a4.crt).

Teraz kasujemy pliki ca.* instytucji (z katalogu pkg.contrib):

Kod: Zaznacz cały

rm ca.crt ca.key
oraz tworzymy katalog /etc/ssl/apache i przenosimy tam dwa pliki naszego certyfikatu:

Kod: Zaznacz cały

mkdir /etc/ssl/apache
mv a4.key /etc/ssl/apache
mv a4.crt /etc/ssl/apache

i kasujemy niepotrzebne już nam śmieci:

Kod: Zaznacz cały

cd /etc/ssl
rm a4*


IV. Konfiguracja mod_ssl

Kod: Zaznacz cały

cd /usr/local/src/mod_ssl-2.8.16-1.3.29
./configure --with-apache=/usr/local/src/apache \
--with-crt=/etc/ssl/apache/a4.crt \
--with-key=/etc/ssl/apache/a4.key

Otrzymamy mniej więcej taki wydruk:

Kod: Zaznacz cały

Configuring mod_ssl/2.8.16 for Apache/1.3.29
+ Apache location: /usr/local/src/apache (Version 1.3.29)
+ Auxiliary patch tool: ./etc/patch/patch (local)
+ Applying packages to Apache source tree:
o Extended API (EAPI)
o Distribution Documents
o SSL Module Source
o SSL Support
o SSL Configuration Additions
o SSL Module Documentation
o Addons
Done: source extension and patches successfully applied.

Now proceed with the following commands (Bourne-Shell syntax):
$ cd /usr/local/src/apache
$ SSL_BASE=/path/to/openssl ./configure ... --enable-module=ssl
$ make
$ make install
V. Wstępna konfiguracja Apache

Kod: Zaznacz cały

cd /usr/local/src/apache
SSL_BASE=/usr/local/src/openssl-0.9.6l/ \
./configure \ 
--prefix=/usr/local/apache \
--enable-module=ssl \
--sysconfdir=/etc/apache \
--htdocsdir=/var/www/htdocs \
--cgidir=/var/www/cgi-bin \
--logfiledir=/var/log/apache
Konfiguracja nasza wygląda tak:
--prefix=/usr/local/apache - tam będa binarki nowego apacha,
--enable-module=ssl - aktywacja modulu ssl dla apacha,
--sysconfdir=/etc/apache - miejsce dla plików konfiguracyjnych,
--htdocsdir=/var/www/htdocs - tam będzie główny katalog naszych dokumentów .html itp...,
--cgidir=/var/www/cgi-bin - miejsce dla skryptów cgi,
--logfiledir=/var/log/apache - katalog z logami access.log i error.log apacha

VI. Konfiguracja i kompilacja php

Kod: Zaznacz cały

cd /usr/local/src/php
./configure --prefix=/usr/local/php \
--with-apache=../apache \
--with-mysql=/usr/local/mysql \
--with-gettext --sysconfdir=/etc/php4
Malutki opis:
--prefix=/usr/local/php - katalog, gdzie trafi php,
--with-apache=../apache - ścieżka do plików apacha (po to był symlink - teraz łatwiej to wpisać),
--with-mysql=/usr/local/mysql - scieżka do MySQL - jeśli jest inna zmienić
--sysconfdir=/etc/php4 - plik konfiguracyjny pakietu php trafi właśnie tam.

Teraz należy skompilować php poleceniem:

Kod: Zaznacz cały

make
i zainstalowac odpowiednio poleceniem:

Kod: Zaznacz cały

make install
VII. Kompilacja Apache

Kod: Zaznacz cały

cd /usr/local/src/apache
SSL_BASE=/usr/local/src/openssl-0.9.6l/ \
./configure \
--prefix=/usr/local/apache \
--enable-module=ssl \
--sysconfdir=/etc/apache \
--htdocsdir=/var/www/htdocs \
--cgidir=/var/www/cgi-bin \
--logfiledir=/var/log/apache \
--activate-module=src/modules/php4/libphp4.a
Opis:
--activate-module=src/modules/php4/libphp4.a - aktywacja modułu php dla apacha

Instalacja apacha, gdy kompilacja sie zakończy:

Kod: Zaznacz cały

make
make install
Nie chcemy także żadnych pytań o hasło klucza prywatnego serwera! :

Kod: Zaznacz cały

cd /etc/apache/ssl.key/
cp server.key server.key.old
openssl rsa -in server.key.old -out server.key
chmod 400 server.key
VIII. Plik httpd.conf oraz skrypty startowe

Należy odpowiednio do potrzeb zmodyfikować plik:
/etc/apache/httpd.conf

Po ustawieniu wszystkich zmiennych dotyczących lokalnego serwera należy jeszcze zmodyfikować wpisy dotyczące php. W tym celu doklejamy w http.conf następujące 2 linijki:

Kod: Zaznacz cały

AddType application/x-httpd-php .php .php3 .php4
AddType application/x-httpd-php.source .phps
W niektórych wersjach apache - linijki te wystarczy odhaszowac, u mnie jednak ich nie było więc należało je ręcznie dodać. Ich miejsce jest mniej więcej w okolicach wpisów do .tar .gz itp...
Następnie należy odnaleźć następującą linijke:

Kod: Zaznacz cały

DirectoryIndex index.html
i zamienić ją na następującą:

Kod: Zaznacz cały

DirectoryIndex index.html index.php index.php3 index.php4 index.cgi
Zostało jeszcze małe skopiowanie jednego pliku:

Kod: Zaznacz cały

cd /usr/local/php
cp php.ini-dist /etc/apache/php.ini
I już mamy gotowego apacha z obsługą php.

Dodatkowo pojawiła się możliwość obsługi ssl (czyli https). Ja ustawiłem sobie w pliku konfiguracyjnym wirtualnego hosta. Wpisy wyglądają tak:

Kod: Zaznacz cały

NameVirtualHost *:80
NameVirtualHost *:443
#
# VirtualHost example:
# Almost any Apache directive may go into a VirtualHost container.
# The first VirtualHost section is used for requests without a known
# server name.
#
<VirtualHost *:80>
ServerAdmin admin@a4.domena.pl
DocumentRoot /var/www/htdocs
ServerName a4.domena.pl
ErrorLog /var/log/apache/normal-error_log
CustomLog /var/log/apache/normal-access_log common
</VirtualHost>
oraz dużo niżej w sekcji dla wirtualnego hosta z ssl wycinek configa mam taki:

Kod: Zaznacz cały

##
## SSL Virtual Host Context
##

#<VirtualHost _default_:443>
<VirtualHost *:443>

# General setup for the virtual host
DocumentRoot "/var/www/htdocs"
ServerName a4.domena.pl
ServerAdmin admin@a4.domena.pl
ErrorLog /var/log/apache/ssl_error_log
TransferLog /var/log/apache/ssl_access_log
# SSL Engine Switch:
# Enable/Disable SSL for this virtual host.
SSLEngine on
#ciach.......ciach.............	
Należy jeszcze uruchamiać apacha z każdym uruchomieniem systemu. W tym celu dodajemy wpis w /etc/rc.d/rc.local:

Kod: Zaznacz cały

/usr/local/apache/bin/apachectl start
Aby przetestować, czy php działa poprawnie tworzymy plik:

Kod: Zaznacz cały

touch /var/www/htdocs/test.php
z zawartością następującą:

Kod: Zaznacz cały

<?php phpinfo(); ?>
Wystarczy teraz sprawdzić, czy wywołując http://a4.domena.pl/test.php zobaczymy ładny plik pokazujący konfiguracje systemu php.
Aby sprawdzić ustawienia ssl wywołujemy https://a4.domena.pl/test.php, gdzie oczywiście a4 to nazwa mojego hosta ;-)

ps
stan surowy bardzo mocno, opis dosc stary, config na 99% dzialajacy, sposob tworzenia certow trzeba przepisac i zrobic taki sam jak w ''postfix + tls + ...", ssl uzywac systemowy a nie ze zrodel i kilka innych przemianowan...
wrzucam, bo ktos tam mial problem z apachem i configiem do niego - a zanim ja to poprzeprawiam... :P

Sformatowałem troszkę (cherry)
Ostatnio zmieniony 2006-11-13, 20:43 przez xil, łącznie zmieniany 1 raz.

Awatar użytkownika
Skyscraper
Administrator
Posty: 753
Rejestracja: 2004-05-22, 10:46
Lokalizacja: Wrocław
Kontakt:

Re: Apache + ssl + MySQL + php

Post autor: Skyscraper » 2005-07-26, 19:03

Xil, istnieje juz opracowywany tekst o tej etmatyce http://forum.slackware.pl/viewtopic.php ... sc&start=0
moze byscie wspolnie stworzyli jeden, obszerniejszy? nie ma sensu powielac a sadze ze razem udalo by sie wam poskladac juz cos konkretnego.

Awatar użytkownika
dame
Moderator w st. spocz.
Posty: 985
Rejestracja: 2004-09-25, 17:37
Lokalizacja: wawa

Re: Apache + ssl + MySQL + php

Post autor: dame » 2005-07-27, 01:33

no jasne, ja jestem za
aktualnie windows xp

Awatar użytkownika
xil
Moderator
Posty: 861
Rejestracja: 2004-06-20, 22:20
Lokalizacja: Białystok
Kontakt:

Re: Apache + ssl + MySQL + php

Post autor: xil » 2005-07-27, 11:13

w zasadzie czemu nie...
mam tylko kilka uwag:
- ja wole kompilowac, a paczek standardowych w slackware z demonami po prostu nawet nie instaluje...
- jesli dobrze pamietam jest w slackware paczka z mod_ssl dla apacha... z tego wzgledu mozna wszystko to co ja wyzej napisalem zrobic takze na paczkach
- inna rzecza sa odmienne sciezki dostepu do programow - jeslibysmy chcieli wspolny opis musi to byc tak samo poinstalowane.. a ja jestem raczej za nie wrzucaniem wszystkiego do systemowych sciezek, wole w jednym miejscu pod jednym katalogiem (ale to maly problem)
- na razie nie wiem jak te 2 faq polaczyc i zrobic jeden... poza taka jakas mysla, zeby zrobic w jednym faq 2 wersje - z paczek i ze zrodel - obie z mod_ssl albo jakies wariacje na ten temat.. sam mod_ssl tutaj sporo utrudnia, bo procz modulu jeszcze dochodza zmiany w configu i tym sposobem z opisu zrozumialego dla kazdego nawet bardzo poczatkujacego robi sie opis z virtualami, certyfikatami i innymi rzeczami...

w tym wypadku mysl przewodnia zrobila sie mniej wiecej taka: czego chcemy od faq i jakim sposobem?

Awatar użytkownika
dame
Moderator w st. spocz.
Posty: 985
Rejestracja: 2004-09-25, 17:37
Lokalizacja: wawa

Re: Apache + ssl + MySQL + php

Post autor: dame » 2005-07-27, 12:59

myślę, że najlepszy jest pomysł zrobienia oddzielnych podpunktów 'ze źródeł' oraz 'z paczki'. ja akurat korzystałem z paczek, bo projekt był niewielki (mała opłacalność kompilacji).
acha, no i ja u siebie nie opisywalem mod_ssl ani certyfikatow

co do mysli przewodniej.. apache to po prostu temat rzeka, nie da sie zrobic czegos krotkiego :/
aktualnie windows xp

Awatar użytkownika
xil
Moderator
Posty: 861
Rejestracja: 2004-06-20, 22:20
Lokalizacja: Białystok
Kontakt:

Re: Apache + ssl + MySQL + php

Post autor: xil » 2005-07-27, 17:01

to co zrobimy z mod_ssl i tworzeniem certyfikatow?
jaki masz pomysl? w obu wersjach - czyli paczki i zrodla czy tylko w jednej?
a moze zrobic jeszcze wieksze faq i np:
1. Apache najprostszym, najbardziej przystepnie opisanym jezykiem
2. certyfikaty
3. Apache z paczek (i tu np juz mod_ssl itp itd)
4. Apache ze zrodel + j.w.
5. Jakis wiekszy opis configa - taki moim zdaniem przystepnie opisujacy wiekszosc opcji z uwzglednieniem kilku fajnych rzeczy jak status serwera itp itd? w tym wypadku opis musialby byc jeden - tzn dla 1.3.4 jeden opis configa, zeby nie wyszlo, ze w jednym miejscu cos nie jest takie samo jak w drugim. pkt 1 mozna pominac, zeby wyszedl najprostszy mozliwy config i by nie zawracac niepotrzebnym wnikaniem niektore osoby
co Ty na to?

Awatar użytkownika
dame
Moderator w st. spocz.
Posty: 985
Rejestracja: 2004-09-25, 17:37
Lokalizacja: wawa

Re: Apache + ssl + MySQL + php

Post autor: dame » 2005-07-28, 23:54

brzmi jak wypas :] mówię o tej szerszej wersji. robimy oczywiście z mod_ssl oraz z tworzeniem certyfikatów
aktualnie windows xp

traser
Użytkownik
Posty: 60
Rejestracja: 2005-07-09, 14:59

Re: Apache + ssl + MySQL + php

Post autor: traser » 2005-08-14, 09:14

"Opis jest naprawdę dobry i zwięzły"

potwierdzam :lol: ledwo rozpakowalem MySQL i już hula :)
Ostatnio zmieniony 2005-08-20, 19:16 przez traser, łącznie zmieniany 2 razy.

Awatar użytkownika
snaj
Moderator w st. spocz.
Posty: 1608
Rejestracja: 2004-10-10, 16:32
Lokalizacja: Warszawa
Kontakt:

Re: Apache + ssl + MySQL + php

Post autor: snaj » 2005-08-16, 23:59

No to jak juz ma byc duze faq to ja bym dorzucil - chrootowanie wszystkiego wlacznie z mysql itd, mod_dosevasion, mod_security, mod_watch, mor_bandwidth, mod_quota, mod_perl no i secure konfiguracje php, apache, mysql.
Nie musze chyba mowic ze to u mnie dziala (CA - zmodyfikowalem slackowe skrypty od tego bo sa nieco niedopracowane) wiec sluze pomoca - jak tylko wroce na sluszne lacze :/
*
[color=blue]Sieci[/color]/[color=green]Serwery[/color]/[color=red]Security[/color] - Freelancer
*

Awatar użytkownika
xil
Moderator
Posty: 861
Rejestracja: 2004-06-20, 22:20
Lokalizacja: Białystok
Kontakt:

Re: Apache + ssl + MySQL + php

Post autor: xil » 2005-08-28, 20:52

kilka wyjasnien:
1) dame ostatnio mial bardzo milutkie checi popchniecia tego, wskutek mej odpowiedzi troche sie to wszystko opoznilo, zeby nie powiedziec, ze przeciagnalem to ojej jak bardzo. teraz chyba nadszedl czas to ruszyc...
2) snaj - to co opisujesz chyba jest calkiem przyzwoita sprawa. wobec tego, ze ja az tak mocno nie wnikalem - objalbys ze tak powiem przewodnictwo i wzial sprawy w swoje rece?

ps
sorki za zastuj w tym temacie...

israel
Użytkownik
Posty: 471
Rejestracja: 2005-03-11, 19:34

Re: Apache + ssl + MySQL + php

Post autor: israel » 2006-06-23, 16:34

Witam,
a czy ostatecznie powstal jakis jeden artykul?
pozdrawiam
[url=http://userbars.org][img]http://img131.imageshack.us/img131/1820/jewishcopymb1.gif[/img][/url]
[url=http://userbars.org][img]http://img239.imageshack.us/img239/9184/polandbar2bj9.gif[/img][/url]

Awatar użytkownika
Blizzard
Użytkownik
Posty: 192
Rejestracja: 2005-06-12, 21:40

Re: Apache + ssl + MySQL + php

Post autor: Blizzard » 2006-10-14, 11:43

tiaa szkoda ze nic nie powstalo, xil snaj dame;]?

Awatar użytkownika
Skyscraper
Administrator
Posty: 753
Rejestracja: 2004-05-22, 10:46
Lokalizacja: Wrocław
Kontakt:

Re: Apache + ssl + MySQL + php

Post autor: Skyscraper » 2006-10-14, 11:46

No właśnie, coś się dzieje? :)

Awatar użytkownika
kajoj
Użytkownik
Posty: 514
Rejestracja: 2005-04-20, 12:37
Lokalizacja: Bydgoszcz
Kontakt:

Re: Apache + ssl + MySQL + php

Post autor: kajoj » 2006-10-15, 22:52

Oprocz tego co napisał snaj,
skoro ma to byc taki super bezpieczny serwerek to moze dorzucic suexec'a, gdyz nie zawsze chcemy aby skrypty cgi byly uruchamian z uid apache.
Do przemyslenia rowniez dorzucam fast-cgi.
[url=http://xt24.eu/sklep/linux/]Koszulki Slackware[/url]
Nie wierz w cuda
- zdaj się na nie.

Awatar użytkownika
Nightwalker
Użytkownik
Posty: 545
Rejestracja: 2006-01-02, 01:23
Lokalizacja: Bytom
Kontakt:

Re: Apache + ssl + MySQL + php

Post autor: Nightwalker » 2006-10-16, 00:24

Proponuej również użycie CODE ponieważ artykuł w takim stanie w jakim jest teraz bardzo źle się czyta...
Na górze fiołki, na dole las, all your base are belong to us

[ [url=http://forum.slackware.pl/viewtopic.php?p=142666]Darmowy shell[/url] ]

ODPOWIEDZ