| Apache a SSL |
|
|
|
| Zhlédnutí: 6940 | ||||||||
| Napsal filbar | ||||||||
| Pátek, 16 březen 2007 | ||||||||
| Aktualizováno ( Pátek, 09 březen 2007 ) | ||||||||
|
V minulém díle našeho seriálu o webserveru Apache jsme ukončili s tím, že se tentokrát budeme věnovat šifrování spojení pomocí SSL a to také dodržím. Ukážeme si jak ssl certifikáty vytvořit, jak nastavit mod_ssl, který je součástí instalace, a také uvidíte zajímavou metodu autorizace pomocí SSL. Vytvoření klíčeCertifikační autoritaPokud chceme SSL v Apache pouze otestovatmusíme si nejprve vytvořit pomocí programku openssl vlastnícertifikační autoritu, abychom si měli jak certifikát, který umístímedo Apache podepsat. Nejlépe v adresáři root si vytvoříme podadresář CA, kde zadáme příkazy: openssl genrsa -des3 -out my-ca.key 2048 Prvnímpříkazem si vytvoříme 2048 bitový klíč šifrovaný pomocí algoritmu DES3.Při jeho tvorbě musíme zadat heslo, kterým bude chráněný. Druhý příkazvytvoří x509 certifikát s trvanlivostí 10 let. Průvodce během námgenerování položí otázky jako kód naší země, jméno města, kde bydlíme,jméno organizace atd. Vytvořený certifikát si prohlédneme příkazem: openssl x509 -in my-ca.crt -text -noout Certifikát pro serverDále už následuje vytvoření samotného certifikátu a klíče proApache. V adresáři, kde chceme mít uložené certifikáty a klíče k Apachizadáme: openssl genrsa -des3 -out server.key 1024 Nejprvesi opět vytvoříme privátní klíč. Pokud během výzvy zadáme heslo, taktoto heslo po nás bude vyžadovat Apache během každého spuštění, což bymohlo při použití startovacích skriptů způsobit potíže. Druhým příkazemtentokrát vytvoříme certifikační požadavek, který si ve třetím krokupodepíšeme pomocí vlastní certifikační autority. Na otázku Common Name(eg, your name or your server's hostname) []: průvodce druhého příkazuje nutné odpovědět plně kvalifikovaným jménem našeho serveru, jinak sebude klientům zobrazovat varování, že certifikát nemusí patřit k našemuserveru a toto by museli pokaždé odkliknout, což by asi nebylo topravé. Certifikát si můžeme zkontrolovat příkazem: openssl x509 -in server.crt -text -noout Jestliže se chystámena reálné použití klíče, tak samozřejmě druhým příkazem skončíme apodepsání certifikátu ponecháme na vybrané certifikační autoritě. Certifikát pro prohlížečVApachi je možné zvýšit zabezpečení stránek až na úroveň, že k nimnebude mít přístup nikdo mimo toho, komu předáme klíč, který si dotyčnýnainstaluje do prohlížeče. Tento klíč vytvoříme následujícími příkazy: openssl genrsa -des3 -out client.key 1024 Opětplatí, že v reálné situaci si certifikát nebudeme podepisovat samipomocí třetího příkazu, ale tuto práci přenecháme certifikačníautoritě. Cílem čtvrtého příkazu je konvertování klíče do formátu p12,který je přijatelný pro www prohlížeče. Právě výstup posledního příkazuje určen pro distribuci na www prohlížeče, které mají mít na chráněnéwww stránky přístup. Konfigurace Apachešifrování pro přenos datZákladní podporu pro šifrování v Apachi zapneme direktivami: Listen 443 Nejprve direktivou SSLEngine zapneme podporupro SSL v Apachi, dále musíme specifikovat port, na kterém bude Apachenaslouchat šifrovaným spojením(Listen). Samozřejmě musíme uvést, kde jeumístěný certifikát(SSLCertificateFile) a klíč(SSLCertificateKeyFile). Dále by se hodilo přídat přípony certifikátů do MIME databázeApache a zadat jak chceme ověřovat heslo k privátnímu SSL klíči Apache: AddType application/x-x509-ca-cert .crt Výchozí hodnota ověřování heslake klíčí Apache(SSLPassPhraseDialog) je builtin. Další variantou je, žemáme nějaký vlastní způsob předávání hesla. V případě produkčníhoserveru se může hodit vytvoření SSL cache direktivou SSLSessionCache.Jako její parametr lze uvést databázový soubor dbm, shm, nebo cachevypnout(none). Cache nastavíme její životnost direktivouSSLSessionCacheTimeout a čase vyšším než 300 sekund. Vnitřní SSLprocesy Apache můžeme synchronizovat pomocí Mutexu(SSLMutex). Zámek jenejjednodušší ukládat do souboru(file:/cesta/k/souboru): SSLSessionCache dbm:/usr/srv//logs/ssl_scache Na začátku je takétřeba nastavit generátor náhodných čísel(SSLRandomSeed). Tato direktivamá dva povinné a jeden nepovinný parametr. První parametr může nabývatdvou hodnot a to pro nastavení generátoru při startu Apache(startup) apři přípojení klienta(connect). Následující parametr určuje odkud se mápočáteční náhodná hodnota brát. Lze si vybrat z vestavěnéhogenerátoru(builtin), soubor(file:/cesta/k/souboru-nejčastěji se používá/dev/random, nebo /dev/urandom), externíhoprogramu(exec:/cesta/k/programu) a socketu Entropy Gathering Daemona(EGD). Poslední parametr určuje kolik bytů se má pro náhodou hotnotu použít. SSLRandomSeed startup file:/dev/random 512 Pokud chceme do nějaké části serveru povolit přístup výhradně přes SSL protokol, umístíme zde direktivu SSLRequireSSL. Šifrování jako autorizaceApacheumí pomocí certifikátů zcela nahradit autorizaci. Stačí, aby wwwprohlížeč měl nainstalovaný odpovídající certifikát, který jsme sivytvořili výše. Do globální části Virtálního hosta zapíšeme: SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL Nejprve určímeseznam možných šifer pro komunikaci mezi serverem aprohlížečem(SSLCipherSuite). Jednotlivé šifry oddělíme pomocí:(dvojtečky). Dále je nutno určit cestu k certifikátům certifikačníautority(SSLCACertificatePath) a certifikát certifikačníautority(SSLCACertificateFile), kterým je podepsán klientský aserverový certifikát. Do takto chráněných adresářů přidáme dvě direktivy: SSLVerifyClient,jehož parametr nastavíme na require. Další varianty parametrů jsouoptional(prohlížeč se může prokázat certifikátem) a (ověřeníprohlížečů je vypnuto). Současně musíme určit jak důlkadné budeprověření platnosti klientského certifikátu(SSLVerifyDepth). Parametr 0zamená, že vyhovuje pouze vlastnoručně podepsaný certifikát, 1 určuje,že certifikát autority musí být uložen v místě, které serverzná(SSLCACertificatePath): SSLVerifyClient require Další možnostiPřístup k serveru lzeomezit a zabezpečit direktivou SSLRequire, která jako parametr přijímávýraz založený na proměnných sestavených do booleovského výrazu: SSLRequire ( %{SSL_CIPHER} !~ m/^(EXP|NULL)/ \ Vpříkladu určujeme, že šifra mezi klientem a serverem se nemají použítšifry EXP a NULL, jméno společnosti v klienstkém certifikátu se márovnat Snake Oil, Ltd., sekce společnosti rovněž v klienstkémcertifikátu může být Staff, nebo CA, nebo Dev. Také omezíme přístup kestránkám pouze na pracovní týden(TIME_WDAY) od 8 do 20 hodin(TIME_HOUR)a pouze z adres 192.76.162.0-192.76.162.9. Pokud chceme změnit běhové vlastnosti SSL úrovni adresářů, využíjemedirektivu SSLOptions, která má šest možností parametru. V CGI skriptechse hodí StdEnvVars(export standartních proměnných pro použití veskriptech), CompatEnvVars(export starších proměnných) aExportCertData(export dat z klientských a serverovýchcertifikátů). Další tři volby jsou FakeBasicAuth(extrahuje zklienstkého certifikátu hodnotu Subject Distinguished Name (DN) apoužije jí místo přihlašovacího jména při http přihlašování),StrictRequire(potlačuje význam direktivy Satisfy any, kdy stačí, abypouze jedna podmínka z dvojice SSLRequireSSL a SSLRequire prošla a tadruhá se vynecháva) a OptRenegotiate, kterou zajistíme optimalizacipočáteční výměny informací při připojení(handshake). Tímto bychom tento trošku delší díl věnovaný šifrování připojení kApachi ukončili, ale už teď vám můžu prozradit na co se můžete těšitpříště. Příští díl bude věnovaný přepisu adres, nebo-li modulu rewrite.
Powered by !JoomlaComment 3.22
3.22 Copyright (C) 2007 Alain Georgette / Copyright (C) 2006 Frantisek Hliva. All rights reserved." |
||||||||
| < Předch. | Další > |
|---|