Domovské stránky Daniela Hrotka

ÚVOD | O MNĚ | O BOHU | ICT | ASTRO | SRANDA | RADIO | Hi-Fi | ODKAZY | KONTAKT

Apache SSL - htaccess - PHP


Autorem následujícího návodu je Jon LaBass. Originální WWW v anglickém jazyku.


3. 2. 2006 Daniel Hrotek





Na úvod



Podíváte-li se do adresáře /usr/ports/www, naleznete v něm několik portů, v jejichž názvu bude obsaženo slovo apache. Většinou se jedná o různé, mírně odlišné verse webového serveru Apache.To znamená , že ještě než začnete cokoliv instalovat, musíte se rozhodnout , kterou versi budete potřebovat. Stručný přehled jednotlivých možností následuje níže.

apache-jserv: Jedná se o webový server Apache se strojem, podporujícím servery v jazyce Java. Tuto versi budete potřebovat v případě, že budete chtít podporovat stránky JSP (Java Server Pages).

apache13: Toto je verze, kterou zřejmě budete chtít: Apache 1.3 bez jakýchkoliv dodatečných vlastností. I tak je však nutné říci, že některé instalace serveru Apache vyžadují rozsáhlé úpravy samotného serveru. Proto se pro jistotu podívejte, zda náhodou některá z dalších versí Vašim potřebám nevyhovuje více.

apache13+ipv6: Webový server Apache s úpravami, podporujícími použití protokolu IP verse 6. Zvolte tuto versi, pokud uvažujete o použití zmíněného protokolu.

apache13-fp: Poměrně oblíbenou platformou pro vývoj webových stránek je Microsoft FrontPage.Instalace této platformy však může být poněkud problematická. Chcete-li podporovat FrontPage, vyberte si tuto variantu.

apache13-modssl: Tento port obsahuje podporu protokolu SSL (Secure Socket Layer), umožňujícího provoz zabezpečených webových stránek. Komponenta, sloužící k vytváření bezpečného připojení , je založena na OpenSSL. Je-li Vaším cílem provoz zabezpečeného webu, nainstalujte tento port.

apache13-ssl: Port, obsahující integrovanou (nemodulární) podporu SSL, která je již dnes považována za zastaralou. Namísto této verse použijte raději apache13-modssl.

apache2: Toto není jen výborný webový server, to je přímo špičkový server. Apache 2 stojí za instalaci i v případě, že se s touto technologií pouze chcete seznámit a nechcete ji zatím použít v běžném provozu. Kromě toho je nutné zdůraznit, že mnohé moduly serveru Apache zatím nebyly portovány. Pokud ale potřebujete provozovat základní webový server, založený na špičkové technologii, pak toto je ta správná volba.



Požadavky





Krok 1. - instalace



Nainstalujeme webový server Apache13-modssl. Pro to, abychom dosáhli co nejvyššího výkonu můžeme při kompilaci využít příkazu make APACHE_PERF_TUNING=YES all install.

# cd /usr/ports/ww/apache-modssl
# make APACHE_PERF_TUNING=YES all install
# make clean


Nyní závisí na tom, zda chcete pro Apache použít i port 80 a i port 443, který je funkční pro zabezpečené spojení s klientem pro SSL. Pokud použijete oba porty, budou Vám Vaše www fungovat jak na portu 80 (http://192.168.2.1)v nezabezpečeném modu, tak na portu 443 (https://192.168.2.1:443) v modu zabezpečeném.

Tuto volbu můžete provést v konfiguračním souboru Apache, který se jmenuje httpd.conf. Pakliže si přejete, aby Apache poslouchal na obou portech, pak bude volba vypadat stejně jako v následujícím příkladu. Pakliže byste chtěli, aby Apache naslouchal jen na portu 443, pak položku Listen 80 zakomentujte křížkem.

# ee /usr/local/etc/apache/httpd.conf

<IfDefine SSL>
       Listen 80
       Listen 443
</IfDefine>


Položka Port je podřazená volbám Listen. Tuto položku vyplňte, chcete-li na port 443, pokud chcete používat pouze zabezpečenou komunikaci mezi klientem a webovým serverem.

# ee /usr/local/etc/apache/httpd.conf

Port 443



Krok 2a. - vytvoření certifikátu SSL, zprovoznění SSL



Pro vytvoření certifikátu nepoužívám “make certificate“, ale raději si certifikát vytvořím sám ručně. Má to tu výhodu v tom, že si pak mohu nastavit automatické spouštění SSL Apache bez nutnosti zadávání hesla při jeho startu.

Nejprve si musíme vytvořit privátní klíč:

# openssl genrsa -des3 1024 > www.domena.cz.key


Tento příkaz sice slouží k vytvoření privátního klíče, ale pořád budeme nuceni zadávat při spouštění Apache zadávat heslo. Tuto vlastnost odstraníme vyjmutím volby -des3.

# openssl genrsa 1024 > www.domena.cz.key


Nyní bychom měli požádat certifikační autoritu o zaslání certifikátu. Tento úkon je však placený. Pro naše potřeby si podepíšeme svůj certifikát sami. Internetový prohlížeč bude sice díky tomuto úkonu hlásit, že přistupujeme na stránky, které nemají podepsán certifikát certifikační autoritou, ale to nám vadit nebude.

# openssl req -new -key www.domena.cz.key -out www.domena.cz.csr


Zde si kompletně popíšete vlastníka certifikátu (stát, město, název firmy, E-mail, název serveru, ...). Heslo ke konci ani nemusíte udávat. Slouží jen ke změně certifikátu od certifikační autority.
Vyplnění může vypadat následovně:

Country Name (2 letter code) [AU]:CZ
State or Province Name (full name) [Some-State]:Czech Republic
Locality Name (eg, city) [ ]:Brno
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Savvy
Organizational Unit Name (eg, section) [ ]:Savvy
Common Name (eg, your name or your server's hostname) [ ]:impa.savvy.cz
Email Address [ ]:helpdesk@savvy.cz

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password [ ]:
An optional company name [ ]:


Jakmile jsme dočasný certifikát vytvořili, tak si jej i sami můžeme podepsat:

# openssl req -x509 -key www.domena.cz.key -in www.domena.cz.csr -out www.savvy.cz.crt


Využijete-li tohoto výše zmíněného příkazu, pak Vám certifikát, nemýlím-li se, vydrží dva měsíce. Přidáte-li však do příkazu volbu –days 365, pak máte certifikát platný na rok. Příkaz bude vypadat následovně:

# openssl req -x509 –days 365 -key www.domena.cz.key -in www.domena.cz.csr -out www.StarHill.org.crt


Pochopitelně můžete zadat klidně 700 dnů. A certifikát pak bude mít danou „životnost“:

# openssl req -x509 –days 700 -key www.domena.cz.key -in www.domena.cz.csr -out www.StarHill.org.crt



Krok 2b. - vytvoření „špinavého certifikátu“ pro Apache



Existuje ještě jedna rychlá možnost jak vytvořit rychle certifikát. Bude však podepsán sám sebou a rozumný internetový prohlížeč Vás na tuto skutečnost upozorní.

Odstraňte starý klíč a certifikát:

# rm /etc/httpd/conf/ssl.key/server.key
# rm /etc/httpd/conf/ssl.crt/server.crt


Zde dochází ke změně oproti správnému postupu. Standardně se postupuje tak, že vygenerujete nový klíč bez passfráze příkazem make genkey v adresáři: cd /usr/share/ssl/certs. Vy užijte příkazu:

# /usr/bin/openssl genrsa 1024 > /etc/httpd/conf/ssl.key/server.key


Nastavte práva:

# chmod go-rwx /etc/httpd/conf/ssl.key/server.key


Nyní vytvořte nový certifikát:

# cd /usr/share/ssl/certs
# make testcert


Restartujte Apache:

# /sbin/service httpd restart



Krok 3. - zprovoznění SSL a nastavení použití certifikátu v httpd.conf



Tímto postupem jsme vytvořili náš certifikát. Nyní jej stačí jen použít. Jak, to si ukážeme dále.

Editujte nyní konfigurační soubor httpd.conf v těchto položkách:

# Zapnuti jádra SSL
SSLEngine on

# Cesta k privátnímu klíči
SSLCertificateKey /neco/nekde/www.domena.cz.key

# Cesta k samotnému certifikátu
SSLCertificateFile /neco/nekde/www.domena.cz.crt


Pokud načítáte modul dynamicky, musíte ještě načíst příslušné moduly: “LoadModule“ a “AddModule“. Toto ale není v našem případě nutné, neboť již používáme server Apache s podporou SSL, tudíž nám tato záležitost odpadá.



Krok 4. - nastavení práv



Předně si však vygenerovanou trojici certifikát CA + certifikát serveru + privátní klíč serveru nakopírujeme do adresářů k tomu určených. Obyčejně se certifikáty nachází v /usr/local/etc/apache.
Přejmenujeme a upravíme oprávnění (pouze root smí číst certifikát s příponou .key, který je tajný). Pokud bychom totiž neprovedli zabezpečení přístupových práv, mohl by se někdo onoho certifikátu zmocnit a napodobovat pak náš server. Takto by bylo naše zabezpečení prolomeno.

# chmod 400 www.domena.cz.key
# chown 0400 root:wheel www.domena.cz.key



Krok 5. - spuštění serveru Apache



Spuštění serveru Apache:

# apachectl start


Restartování serveru Apache:

# apachectl restart


Podobný příkaz jako apachectl restart je také apachectl graceful, který znovu načte své konfigurační soubory a nerestartuje celý server Apache:

# apachectl graceful


Pakliže chcete, aby se webový server Apache spouštěl při každém startu operačního systému a Vy jej nemuseli startovat ručně, pak využijte tohoto příkazu:

# echo 'apache_enable=“YES“' >> /etc/rc.conf


Kontrolu běhu serveru Apache můžete zjistit několika příkazy. Zde jsou uvedeny čtyři:

# ps –ax | grep httpd | wc –l
# ps –axx
# ps –aux
# top



Krok 6. - htaccess a htpasswd



Vyvstane-li potřeba omezit přístup k nějaké části www stromu, je namístě použít některou z metod autorizace. Jedna z nich, která je založena na standardní funkci webového serveru a tak neklade na uživatele téměř žádné nároky, je autorizace prostřednictvím direktiv v souborech .htaccess a .htpasswd.

Autorizace je prováděna na základě dvojice jméno/heslo, která se nachází v souboru .htpasswd. Oba soubory, .htaccess i .htpasswd jsou soubory textové, takže k modifikaci postačí jakýkoli textový editor. Omezení přístupu pak funguje rekurzivně od adresáře, kde se nachází soubor .htaccess, tedy pokrývá i všechny podadresáře a soubory v nich.

Aby nám výše zmíněná záležitost fungovala, pak je potřeba ji pro používání povolit v konfiguračním souboru serveru Apache httpd.conf.

Vyhledejte si v konfiguračním souboru httpd.conf řádku „AllowOverride“ a zapište do něj: „AuthConfig“:

# ee /usr/local/etc/apache/httpd.conf

<Directory “/usr/local/www/data“>
       Options Indexes FollowSymLinks MultiViews
       AllowOverride AuthConfig
       Order allow,deny
       Allow from all
</Directory>


V adresáři /usr/local/www/data se povětšinou nachází naše HTML soubory k publikování – index.html, atd. Nyní je máme „zaheslovány“. Při vstupu na námi "zaheslovanou" adresu pak vyskočí okno s výzvou k zadání uživatelského jména a hesla.

Zakázat můžete i přístup k manuálu, který by byl jinak přístupný na adrese: https://192.168.2.1/manual/

# ee /usr/local/etc/apache/httpd.conf

Alias /manual/ “/usr/local/share/doc/apache/“

<Directory “/usr/local/share/doc/apache“>
       Options Indexes FollowSymLinks MultiViews
       AllowOverride None
       Order allow,deny
       Deny from all
</Directory>


Vytvoříme databázi uživatelů a jejich hesel, kterým chceme povolit přístup. Hesla jsou šifrována pomocí DES algoritmu v souboru .htpasswd. Nejdříve si však vytříme textový soubor .htpasswd a ihned také .htaccess.

Sekce A -- htpasswd
.htpasswd uložíte do adresáře /usr/local/etc/apache/passwd/. Jedná se o soubor skrytý, proto je před ním umístěna tečka.
Sekce B -- přidávání uživatelů

Uživatele přidáte následujícím způsobem:
Pozor: Dalšího uživatele přidáte stejným způsobem, ale již nesmíte použít volbu -c.

# htpasswd -c /usr/local/etc/apache/passwd/.htpasswd daniel
New password:
Re-type new password:
Adding password for user daniel.


Sekce C -- htaccess

Editovat budeme textový soubor .htaccess, který pak umístíme do adresáře, kde máme své dokumenty připravené k publikování (tam, kde se nachází Váš index.html). Zapište do něj následující řádky:

AuthUserFile /usr/local/etc/apache/passwd/.htpasswd
AuthName “Zadejte, prosim, Vase uzivatelské jmeno a heslo:“
AuthType Basic
Require valid-user


Poznámka: Vytvořit si pro přístup můžete i skupiny uživatelů, ale o tom již více nápověda k webovému serveru Apache.

Sekce C -- nastavení práv
# chown root:nogroup /usr/local/etc/apache/passwd/.htpasswd
# chmod 640 /usr/local/etc/apache/passwd/.htpasswd


Opět si vytvoříme textový soubor jako v případě .htaccess. Bude se však jmenovat .htpasswd a umístíme jej do /usr/local/etc/apache/passwd/

Nezapomeňte si také v httpd.conf vyplnit údaje týkající se Vašeho serveru:

#     General setup for the virtual host

DocumentRoot “/usr/local/www/data“
ServerName dan.domena.com
ServerAdmin dan@domena.com
ErrorLog /var/log/httpd-error.log
TransferLog /var/log/httpd-access.log



Krok 7. - zákaz procházení mezi adresáři (directory listing)



Smažte v konfiguračním souboru položky Indexes. Řádky vypadají v httpd.conf například takto:

Options Indexes MultiViews


Poznámka: V serveru Apache je listování v adresářích (directory listing) implicitně povoleno. U IIS v MS je však implicitně zakázáno.

Restartujte s tímto celým nastavením webový server Apache:

# apachectl restart



Krok 8. - PHP



# cd /usr/ports/www/mod_php4
# make install distclean
# cd /usr/ports/lang/php4-extensions
# make install distclean


Now, when you get to the PHP configuration screen, you just need to check the OpenSSL box and leave the rest of the default values alone, unless you plan on installing other applications, such as the IMP Webmail, that require other PHP modules. Time to take another break.

PHP should be installed by now. At the end of the installation, you will need to edit Apache's configuration file to add two lines after all the “LoadModule“ lines for PHP support.

# ee /usr/local/etc/apache/httpd.conf
AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps


Zprovoznění vzkazovníku. Musíte souboru, do kterého se zapisují data ze vzkazovníku (vzkazy.dat) přidělit příslušná práva.
(Přejmenujte konfigurační soubor php.ini.recommended v /usr/local/etc/ na php.ini. Editujte pak v konfiguračním souboru php.ini na serveru, kde Vám běží PHP:

# ee /usr/local/etc/php.ini
register_globals = On


Nyní pro jistotu restartujte celý operační systém:

# init 6



Krok 9. - více jmen pro jeden virtuální server {Macan - http://moje.the.cz/}



Narazíte-li na situaci, kdy má zákazník doménu www.firma.cz a přikoupil další domény (www.firma.com, www.firma.sk) a chce aby www.firma.comwww.firma.sk ukazovaly na www.firma.cz, s tím, aby v adresním řádku prohlížeče zůstávala uživatelem vložená adresa, existuje několik řešení. Některá řešení pracovala s více virtuálními servery, jiná zase s mod_rewrite a redirectem. Já to udělal velice jednoduše:

1) změnit si příslušné DNS záznamy, aby ukazovaly na stejnou IP
2) založit v httpd.conf virtuální server:
<VirtualHost *>
ServerAdmin pm@nekde.cz
DocumentRoot /home/firma_cz
ServerName www.firma.cz
ServerAlias www.firma.com www.firma.sk
ErrorLog /var/log/www.firma.cz-error_log
CustomLog /var/log/www.firma.cz-access_log common
SSLEngine off
</VirtualHost>

Pak už jen restartujete Apache a je to :-)




Krok 10. - testování



Vadí-li Vám zapisování IP adresy do Vašeho webového prohlížeče, pak můžete využít následující postup, který Vám ukáže, jak se bez zapisování IP adresy obejít. Tedy, místo tvaru https://192.168.2.2 v prohlížeči budete moci psát například https://dan.starhill.org.
Poznamenávám, že pro otestování stačí zápis v IP adrese.

Chcete-li si svůj server Apache otestovat lokálně, například ve své lokální počítačové síti (nemáte registrovánu doménu), pak budete editovat v UNIXu soubor /etc/hosts. Pro Windows stanice se daný konfigurační soubor nachází zde Windows/system32/drivers/etc/hosts. Ve všech OS bude vypadat níže uvedený řádek stejně. Mezi OS Windows, UNIX, OS/2 a jinými nejsou v tomto směru rozdíly.

Zapište do konfiguračního souboru hosts následující řádek, který bude odpovídat hodnotám počítače, na kterém Apache běží:

192.168.2.2        dan.starhill.org        dan


Pokud byste však již chtěli v nějaké lokální síti užívat zápisu jmen do internetového prohlížeče (v síti například s 50 ti počítači), pak Vás jistě správně napadlo, že editace, nebo rozkopírování souboru hosts do všech počítačů efektivní práci nepřinese. Proto je pak lépe si na počítači, kde Vám server Apache běží rozjet i doménový server BIND.

Operační systémy
 povídání o FreeBSD začínáme s FreeBSD FreeBSD - základní kroky Sun Solaris - základní kroky Linux - základní kroky Windows - základní kroky
 
Hrátky s operačními systémy
 FreeBSD router FreeBSD ve firmě FreeBSD porty - jak na ně? vytváření FreeBSD balíčku instalace NetBSD
 
Počítačové sítě
 StarHill esej o bezdrátových sítích pasivní restranslace tvorba sítí typu ethernet Pure-FTPd + SSL + VA Samba a její nastavení Apache SSL - htaccess - PHP DHCP server Nessus
 
Lokalizace
 manuály FreeBSD RONJA Pure-FTPd nastavení Pure-FTPd
 
Software
 Visual Basic Acrobat Reader 5 a FreeBSD logovací démon - syslogd
 
Jednočipy
 programátor PIC
 
Různé
 mé konfigurační soubory