www.SAMURAJ-cz.com 

01.05.2024 Svátek práce Translate to English by Google     VÍTEJTE V MÉM SVĚTĚ

Články

Apache server (EasyPHP) se SSL na Windows

Sobota, 25.08.2007 10:52 | Samuraj - Petr Bouška |
Bezpečnost je již dlouhou dobou důležitým faktorem webu a nejen v internetu, ale stále více důležitých funkcí ve firmě se implementuje do intranetu. Asi základním, a přitom relativně jednoduchým a účinným, je použití SSL, tedy šifrování komunikace. Pro Apache server existuje rozšířený modul mod_ssl (a také několik dalších), který však je primárně vyvíjen pro Linux. Konečně se mi podařilo rozchodit Windowsovou verzi, která však není doporučena pro provozní prostředí.

Tento článek je pouze drobnou úpravou návodu The Apache + SSL on Win32 HOWTO. Věnuje se serveru Apache 1.3.x (testoval jsem na verzi 1.3.33), i když je dnes doporučeno používat verzi Apache 2.x. Návod je popisován při použití balíku EasyPHP 1.8 (Apache, MySQL, PHP, phpMyAdmin), ale pro samostatný Apache je vše téměř stejné. Provoz jsem zkoušel na Windows XP a Windows Server 2003.

1. instalace Apache - EasyPHP

Instalace EasyPHP je velmi jednoduchá. V popisu budu vycházet z toho, že jsme jej nainstalovali do adresáře c:\easyphp.

EasyPHP nalezneme na adrese http://easyphp.org/. Samostatný Apache na http://httpd.apache.org/.

Stručný popis EasyPHP je v článku Apache, MySQL, PHP - EasyPHP a základní konfigurace Apache Konfigurace Apache a PHP.

Můžeme otestovat, že nám web server chodí tím, že z internetového prohlížeče přistoupíme na adresu http://localhost/.

Konfigurace portu pro SSL

Protokol http používá defaultně port 80 a protokol https (tedy HTTP přes SSL) port 443.

Upravíme konfiguraci Apache (soubor httpd.conf) tím, že klikneme pravým tlačítkem na ikonu EasyPHP ve stavové liště a zvolíme Configuration - Apache.

  • najdeme řádek Port 80 a zakomentujeme #Port 80 (místo portu budeme používat Listen)
  • najdeme řádek Listen 127.0.0.1:80 (poslouchá pouze z lokálu a port 80), ten zakomentujeme a přidáme Listen 80 (pokud chceme, aby fungovalo klasické HTTP) a Listen 443 (pro HTTPS)
  • najdeme řádek ServerName localhost a localhost zaměníme za DNS jméno serveru (nebo IP adresu), přes které budou přistupovat klienti, třeba ServerName www.local

Nyní můžeme otestovat, že server běží na portu 443 (pořád, ale neběží SSL) http://localhost:443/

2. OpenSSL a mod_ssl

Z adresy hunter.campbus.com stáhneme poslední verzi Apache s mod_ssl (nyní to je Apache_1.3.37-Mod_SSL_2.8.28-Openssl_0.9.8b-Win32.zip) a OpenSSL pro Windows (Openssl-0.9.8d-Win32.zip). Oba archívy rozbalíme do dočasných složek.

Z adresáře OpenSSL zkopírujeme knihovny ssleay32.dll a libeay32.dll, buď do Windows\System32, což není doporučováno, pokud provozujete více aplikací, které používají tyto knihovny (každá aplikace potřebuje jinou verzi), ale jednoduše funguje, nebo do adresáře s EasyPHP, ale je třeba ošetřit cesty.

3. Vytvoření serverového certifikátu

Aby mohlo SSL fungovat, tak musí mít server certifikát. Pro testování můžeme vydat neověřený certifikát - self-signed (možnost A), ale pro provozní prostředí je určitě lepší certifikát od veřejné autority nebo od firemní CA (možnost B).

Pro certifikáty ve spolupráci s Apachem můžeme použít OpenSSL. Pro OpenSSL potřebujeme konfigurační soubor, můžeme použít openssl.cnf, který funguje beze změny.

  • Nejprve musíme vytvořit žádost (v obou případech) a privátní klíč. Příkaz vytvoří žádost server.req spolu s privátním klíčem privkey.pem. Musíme zadat několik hodnot, jako heslo a hodnoty, které se zobrazí v certifikátu. Nejdůležitější je Common Name, kam zadáme adresu našeho serveru, třeba www.local .
openssl req -config openssl.cnf -new -out server.req
  • V dalším kroku musíme odstranit z privátního klíče passphrase, aby k němu mohl přistupovat Apache. Měli bychom tedy zajistit, aby se k souboru dostal pouze Apache server a administrátor.
openssl rsa -in privkey.pem -out server.key
  • Dále již vytváříme vlastní certifikát ze žádosti. V případě B použijeme náš administrační nástroj CA pro vytvoření certifikátu. V případě A použijeme následující příkaz, v parametru days můžeme specifikovat délku platnosti.
openssl x509 -in server.req -out server.cer -req -signkey server.key -days 365
  • Vytvořený certifikát je ve formátu Base-64 encoded x.509, potřebném pro Apache. Windows (hlavně starší) preferují formát DER encoded x.509. Pomocí OpenSSL můžeme převádět formáty mezi sebou.
openssl x509 -in server.cer -out server.der.cer -outform DER

Na závěr musíme nakopírovat certifikát (server.cer) a privátní klíč (server.key) do nově vytvořené složky c:\easyphp\apache\conf\ssl.

4. Konfigurace Apache s mod_ssl

  • Zastavíme Apache (pomocí rozhranní EasyPHP nebo vypneme celé EasyPHP).
  • Z adresáře, kam jsme si rozbalili stažený Apache s mod_ssl, zkopírujeme všechny soubory *.exe, *.dll, *.so (měly by se nacházet v podadresářích bin, modules a v rootu složky) do adresáře c:\easyphp\apache, včetně podsložek a vše přepíšeme. Jsou to soubory, které jsou zkompilovány s podporou mod_ssl (asi nejsou potřeba všechny, ale netestoval jsem to).
  • V konfiguraci Apache (httpd.conf, pomocí rozhranní EasyPHP) přidáme do sekce LoadModule
LoadModule ssl_module modules/mod_ssl.so
  • a do sekce AddModule
AddModule mod_ssl.c
  • a nakonec souboru doplníme informace o certifikátu a SSL. Řádek SSLLogLevel můžeme po otestování změnit na warn, aby se do logu nezapisovalo tolik informací. Do VirtualHost musíme zadat správné jméno serveru.
SSLMutex sem
SSLRandomSeed startup builtin
SSLSessionCache none

SSLLog logs/SSL.log
SSLLogLevel info

<VirtualHost www.local:443>
  SSLEngine On
  SSLCertificateFile conf/ssl/server.cer
  SSLCertificateKeyFile conf/ssl/server.key
</VirtualHost>
  • nastartujeme Apache a vše by mělo fungovat

Nyní již můžeme vyzkoušet přistoupit na stránku přes SSL https://localhost/

Poznámky

Upozornil bych na několik problémů, s kterými jsem se setkal, a které mohou vést k tomu, že Apache nenastartuje.

  • správná jména serveru (adresa) ve VirtualHost, ServerName a CommonName u certifikátu, pro testování můžeme všude používat localhost
  • pod VirtualHost odkaz na správný certifikát (cesta a jméno)
  • certifikát ve správném formátu Base-64 encoded

Do souboru error.log Apache serveru se zapisuje varování

[warn] Loaded DSO C:/EasyPHP/php/php4apache.dll uses plain Apache 1.3 API, this module might crash under EAPI! (please recompile it with -DEAPI)

Nepodařilo se mě nikde sehnat takto zkompilovaný soubor nebo nějaké řešení. Ale vše běží v pořádku i s tímto varováním.

zobrazeno: 24779krát | Komentáře [4]

Autor:

Související články:

Apache, MySQL, PHP

Články v této sérii se věnují popisu a konfiguraci asi nejpoužívanější kombinace pro provoz webových stránek.

Pokud se chcete vyjádřit k tomuto článku, využijte komentáře níže.

Komentáře

  1. [1] rudolf

    :-)Řeším to také.

    Sobota, 08.03.2008 17:08 | odpovědět
  2. [2] pojízdná kočka

    taky to řeším, takže vítám, že jsem to našel všechno v kupě

    Pátek, 12.12.2008 03:35 | odpovědět
  3. [3] Samuraj

    Dnes již používám WAMP www.wampserver.com, kde je vše předpřipraveno a funguje velmi dobře po krátké konfiguraci.

    Pátek, 12.12.2008 08:53 | odpovědět
  4. [4] Radim

    10 let po vydání článku a stále pomohl! :) (jasný, easyphp si trochu stěžovalo na nějaké už nepodporované direktivy, ale nic co by se nedalo natipovat) Díky!

    Čtvrtek, 22.06.2017 18:21 | odpovědět
Přidat komentář

Vložit tag: strong em link

Vložit smajlík: :-) ;-) :-( :-O

Nápověda:
  • maximální délka komentáře je 2000 znaků
  • HTML tagy nejsou povoleny (budou odstraněny), použít se mohou pouze speciální tagy (jsou uvedeny nad vstupním polem)
  • nový řádek (ENTER) ukončí odstavec a začne nový
  • pokud odpovídáte na jiný komentář, vložte na začátek odstavce (řádku) číslo komentáře v hranatých závorkách