Domů arrow Domů arrow Apache a SSL
Apache a SSL PDF Tisk E-mail
Zhlédnutí: 6940
Hodnocení čtenářů: / 4
SlabéVynikající 
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íče

Certifikační autorita

Pokud 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
openssl req -new -x509 -days 3650 -key my-ca.key -out my-ca.crt

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 server

Dá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
openssl req -new -key server.key -out server.csr
openssl x509 -req -in server.csr -out server.crt -sha1 -CA/root/CA/my-ca.crt -CAkey /root/CA/my-ca.key -CAcreateserial -days 3650

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
openssl req -new -key client.key -out client.csr
openssl x509 -req -in client.csr -out client.crt -sha1 -CA/root/CA/my-ca.crt -CAkey /root/CA/my-ca.key -CAcreateserial -days 3650
openssl pkcs12 -export -in client.crt -inkey client.key -name "Client certificate" -out client.p12

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 dat

Základní podporu pro šifrování v Apachi zapneme direktivami:

Listen 443
<VirtualHost _default_:443>
SSLEngine on
SSLCertificateFile /usr/srv//etc/ssl/server.crt
SSLCertificateKeyFile /usr/srv//etc/ssl/server.key
</VirtualHost>

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
AddType application/x-pkcs7-crl .crl
SSLPassPhraseDialog builtin

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
SSLSessionCacheTimeout 300
SSLMutex file:/usr/srv//logs/ssl_mutex

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
SSLRandomSeed startup file:/dev/urandom 512
SSLRandomSeed connect file:/dev/random 512
SSLRandomSeed connect file:/dev/urandom 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 autorizace

Apacheumí 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
SSLCACertificatePath /usr/srv//conf/ssl/
SSLCACertificateFile /usr/srv//conf/ssl/my-ca.crt

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 none(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
SSLVerifyDepth 10

Další možnosti

Pří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)/ \
and %{SSL_CLIENT_S_DN_O} eq "Snake Oil, Ltd." \
and %{SSL_CLIENT_S_DN_OU} in {"Staff", "CA", "Dev"} \
and %{TIME_WDAY} >= 1 and %{TIME_WDAY} <= 5 \
and%{TIME_HOUR} >= 8 and %{TIME_HOUR} <=20 ) \
or %{REMOTE_ADDR} =~ m/^192\.76\.162\.[0-9]+$/

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.

Komentářů
Přidat Nový Hledat RSS
Přidat komentář
Jméno:
Email:
 
Website:
Název:
UBBKód:
[b] [i] [u] [url] [quote] [code] [img] 
 
 
:angry::0:confused::cheer:B):evil::silly::dry::lol::kiss::D:pinch:
:(:shock::X:side::):P:unsure::woohoo::huh::whistle:;):s
:!::?::idea::arrow:
 
Please input the anti-spam code that you can read in the image.

3.22 Copyright (C) 2007 Alain Georgette / Copyright (C) 2006 Frantisek Hliva. All rights reserved."

 
< Předch.   Další >

Zapomenuté heslo
Nemáte účet? Vytvořte jej!
Skype: My status bartfil
Jabber: bartmann@rupyhost.cz

Doporučujeme

Příběhy psů z útulků