Blok 9 Bezpečnost HTTP Studijní cíl Devátý blok kurzu je věnován Identifikaci, autentizaci a bezpečnosti Hypertext Transfer Protokolu. Po absolvování bloku bude student ovládat partie týkající se zabezpečení protokolu http a konfigurace SSL v prostředí webového serveru. Doba nutná k nastudování 2-3 hodiny Průvodce studiem Pro studium tohoto bloku jsou u studentů předpokládány pokročilé znalosti HTTP protokolu a základní povědomí o šifrování počítačových sítí. 9.1 Úvod do šifrování a bezpečné komunikace 9.1.1 Základní pojmy Šifrovací algoritmus - je funkce, obvykle sestavená na nějakém matematickém základě, která provádí samotné šifrování a dešifrování dat. Šifrovací klíč - říká šifrovacímu algoritmu, jak má data šifrovat nebo dešifrovat. Klíče se podobají počítačovým heslům: jakmile informaci zašifrujete, musíte k jejímu dešifrování zadat správný klíč. Šifrovací algoritmus používá klíč při transformaci zašifrovaného textu zpět do nezašifrované podoby. Délka klíče - Stejně jako hesla, i klíče mají nějakou předem určenou délku. Delší klíče jsou bezpečnější než kratší klíče, protože při použití útoku hrubou silou skýtají více kombinací. Různé šifrovací systémy umožňují použití klíčů různých délek, některé dovolují použití klíčů s proměnnou délkou. Výsledná kvalita ochrany dat spočívá ve zvolené šifrovací metodě, typem užitého algoritmu, jeho aplikací, a délkou šifrovacího klíče. KIT/ISPWE 9-1 Lukáš Čegan
9.1.2 Principy bezpečné komunikace Důvěrnost informací - Systém musí zabezpečit, že neautorizované subjekty nebudou mít možnost přístupu k důvěrným informacím Integrita - Systém musí zabezpečit informace proti neautorizované modifikaci Neodmítnutelnost odpovědnosti - Systém musí zabezpečit prevenci proti ztrátě schopnosti přesvědčit třetí nezávislou stranu o přímé odpovědnosti subjektu za odeslání, případně přijetí zprávy. 9.1.3 Šifrovací metody Symetrické šifrování - K šifrování a dešifrování dat se používá pouze jeden klíč. Tento klíč proto musí znát obě strany. Obrázek 1: Symetrické šifrování Asymetrické šifrování - Data se zašifrují veřejným klíčem a mohou být dešifrovány pouze klíčem soukromým Obrázek 2: Přenos adresované, zašifrované (důvěrné), ale nepodepsané (neautorizované) zprávy KIT/ISPWE 9-2 Lukáš Čegan
Obrázek 3: Přenos adresované, zašifrované (důvěrné) a podepsané (autorizované) zprávy 9.1.4 Šifrovací algoritmy Šifrovací systémy se soukromým klíčem DES, 3DES - Data Encryption Standard (DES) je šifrovací algoritmus, vyvinutý v 70. letech Národním úřadem pro standardy a technologie (dnes National Institute of Standards and Technology, NIST) a firmou IBM. DES používá klíč o délce 56 bitů. RC2, RC4 - Blokové šifry původně vyvinuté Ronaldem Rivestem a uchovávané jako obchodní tajemství firmy RSA Data Security. RC5 - Bloková šifra vyvinutá Ronaldem Rivestem, publikovaná v roce 1994. RC5 umožňuje uživateli definovat délku klíče, délku bloku dat a počet šifrovacích průchodů. IDEA - International Data Encryption Algorithm (IDEA), vyvinutý Jamesem L. Massey a Xuejia Lai v Curychu, publikovaný v roce 1990. Skipjack - Algoritmus s klasifikací Tajný, vyvinutý Národní bezpečnostní agenturou (NSA). Šifrovací algoritmy s veřejným klíčem Diffie-Hellman - Systém pro výměnu kryptografických klíčů mezi dvěma stranami. Nejedná se vlastně o šifrovací algoritmus, ale o metodu pro výměnu sdíleného privátního klíče přes veřejné komunikační kanály. RSA - Známý kryptografický systém s veřejným klíčem, vyvinutý (tehdejšími) profesory MITu Ronaldem Rivestem a Adi Shamirem a profesorem USC Leonardem Adlemanem. RSA je možno použít jednak KIT/ISPWE 9-3 Lukáš Čegan
jako šifrovací algoritmus a také jako základ pro systém digitálních podpisů. ElGamal - Algoritmus založený na exponenciální a modulární aritmetice. Podobně jako RSA algoritmus se dá použít k šifrování a digitálním podpisům. DSA - Digital Signature Algorithm, vyvinutý v NSA a převzatý NISTem jako federální standard pro zpracování informací (FIPS). Přestože algoritmus DSA může používat klíče libovolné délky, podle FIPS je možno použít pouze klíče o délce 512 a 1024 bitů.jak vyplývá z názvu, DSA slouží pouze pro digitální podpisy, dá se však upravit i pro potřeby šifrování. 9.1.5 Digitální certifikát Certifikát je zašifrovaná informace, která spojuje veřejný klíč s pravou identitou subjektu. Vydavatel certifikátu se označuje jako certifikační autorita. Certifikát v základní formě obsahuje veřejný klíč, jméno a další údaje zajišťující nezaměnitelnost subjektů. V rozšířené formě potom datum počátku a datum ukončení platnosti, jméno certifikační autority, která certifikát vydala a sériové číslo. Certifikační autorita Komerční vydávají certifikát na základě prověření zákonných záznamů. Např.: www.verisign.com Soukromá (samocertifikační) vydává si certifikáty sama k vlastní potřebě. Nepředpokládají se klienti, kteří by ji nevěřili. Certifikační autority české První certifikační autorita a.s. - http://www.ica.cz/home_cs/ CZ Czechia - http://www.caczechia.cz/ TrustPort - http://www.trustport.cz/ zahraniční VeriSign - http://www.verisign.com/ GeoTrust - http://www.geotrust.com/ Comodo - http://www.instantssl.com/ CACert - https://www.cacert.org/ KIT/ISPWE 9-4 Lukáš Čegan
9.2 SSL(Secure Sockets Layer) SSL vyvinula firma Netscape Commmunications pro zajištění bezpečné komunikace mezi klientem a serverem. SSL je komunikační protokol, který zajišťuje šifrování dat, autentizaci serveru, datovou integritu a autentizaci klienta pro komunikaci na bázi protokolu TCP/IP. Obrázek 4: SSL 9.2.1 Verze SSL Verze 2.0 první verze uvolněná pro používání, měla poměrně dost slabých míst a byla snadno napadnutelná Verze 3.0 - významná úprava bezpečnostních vlastností verze 2.0 TLS (Transaction Layer Security) někdy označován jako SSL 3.1, vznikl v rámci IETF jako internetový standard pro nahrazení 3.0 Protokol TLS je založen na specifikaci protokolu SSL 3.0 publikované firmou Netscape. Rozdíly mezi TLS 1.0 a SSL 3.0 nejsou dramatické, ale jsou natolik významné, že spolu protokoly nespolupracují (ačkoliv TLS 1.0 obsahuje mechanismus pro zpětnou kompatibilitu se SSL 3.0). 9.2.2 Sub-protokoly SSL SSL Handshake Protokol SSL Change Cipher Spec Protocol SSL Alert Protocol SSL Record Protocol SSL Handshake Protocol 1. Klient odešle verzi SSL, informace o šifrách, které používá a náhodně generovaná data KIT/ISPWE 9-5 Lukáš Čegan
2. Server odešle svoji verzi SSL, informace o šifrách, které používá, náhodně generovaná data a svůj certifikát 3. Klient pomocí získaného certifikátu ověří důvěryhodnost serveru, pokud tak nelze učinit, je o tom informován uživatel a spojení je ukončeno 4. Klient vytvoří z dat dosavadní komunikace tzv. premaster secret, zašifruje ho pomocí veřejného klíče serveru získaného z certifikátu a odešle ho serveru 5. Server použije svůj privátní klíč k dešifrování premaster secret a vytvoří z něj master secret, ze kterého si vygeneruje klíč sezení 6. Klient si rovněž vytvoří master secret a z něj vygeneruje klíč sezení 7. Klient zašle zprávu serveru, že další data budou šifrována klíčem sezení a odešle zašifrované sdělení, že fáze handshake byla u něj skončena 8. Server rovněž zašle, že další data budou šifrována klíčem sezení a odešle zašifrované potvrzení, že fáze handshake byla ukončena. SSL Change Cipher Spec Protocol Tento protokol je používán v poslední fázi činnosti SSL Handshake protokolu. Jeho účelem je umožnit účastníkům přesun z vyčkávacího do provozního stavu. To znamená, že účastníci ukončí použití algoritmus výměny klíčů a začnou používat šifrovací a ověřovací algoritmy, které byly definovány v předchozích fázích Handshake protokolu. SSL Alert Protocol Významem tohoto protokolu je předávání informací o chybách objevujících se v průběhu celého spojení (connection). Výstrahy (alerts) jsou dvou úrovní fatální a varovné. Pokud se objeví fatální výstraha, spojení je okamžitě ukončeno. Ostatní spojení používající stejnou cestu (session) mohou pokračovat, ale session ID bude označeno jako neplatné, takže na této cestě nebude možné navázat žádné nové spojení. SSL Record Protocol Přenášená data jsou v případě protokolu SSL balena do objektu nazývaného record. Record obsahuje hlavičku a data (formát přenášených dat). KIT/ISPWE 9-6 Lukáš Čegan
Praktické cvičení 1. Založte si na hostingovém serveru http://fei-hostingadmin.upceucebny.cz účet a vytvořte zabezpečenou zónu pomocí prostřednictvím HTTP autentizace. a. Zavedení modulu při startu Apache LoadModule ssl_module modules/mod_ssl.so b. Zavedení externího konfiguračního souboru Include conf/extra/httpd-ssl.conf c. Vytvoření soukromého klíče openssl req -config../conf/openssl.cnf -new -out myserver.csr Při vyplňování zadejte do Common Name přesné jméno domény pro kterou bude certifikát platný Výsledkem jsou soubory:.rnd soubor s náhodnými daty, podle kterých se vytvořil klíč my-server.csr certifikát privkey.pem soukromý klíč d. Vytvoření serverového šifrovacího klíče openssl rsa -in privkey.pem -out my-server.key Výsledkem je soubor my-server.key klíč kterým server šifruje komunikaci. e. Vytvoření certifikátu - na začátku komunikace obdrží klientův prohlížeč openssl x509 -in my-server.csr -out my-server.cert -req - signkey my-server.key -days 365 Výsledkem je certifikát s platností 365 dni my-server.cert f. Vytvoření samostatného certifikátu potřebný pro starší prohlížeče, do kterých se musí certifikát ručně stáhnout a nainstalovat. openssl x509 -in my-server.cert -out my-server.crt - outform DER Výsledkem je certifikát my-server.crt KIT/ISPWE 9-7 Lukáš Čegan
g. Konfigurace konfiguračního souboru http-ssl.conf SSLCertificateFile "C:/apache/conf/my-server.cert" SSLCertificateKeyFile "C:/apache/conf/my-server.key" Umístěte váš certifikát conf my-server.cert a klíč my-server.key do vámi určeného uložiště a upravte k nim cesty v http-ssl.conf h. Ošetření přístupu uživatelů na vaše stránky zabezpečeně. Lze zajistit pomocí přesměrování do zabezpečené zóny. Například v PHP <?php $SSL_Port=443; if ($_SERVER['SERVER_PORT']!=$SSL_Port) { header ("Location: https://localhost/index.php"); exit(); } phpinfo();?> 2. Připojte se na server http://fei-hostingadmin.upceucebny.cz a prostudujte certifikát spojení server. 3. Analyzujte zabezpečenou síťovou komunikaci prostřednictvím programu WhiteShark 1. Otázky k procvičení pasáže 1. Co je to Cookies a k čemu slouží? 2. Jaký je rozdíl mezi Basic a Digest autentizací? 3. K čemu slouží SSL? 4. Co obsahuje digitální certifikát? 5. Jaký je rozdíl mezi symetrickým a asymetrickým šifrováním? Odkazy na další studijní materiály http://www.openssl.org/ (Open SSL) http://www.ietf.org/rfc/rfc2818.txt (HTTP Over TLS) http://www.ietf.org/rfc/rfc2459.txt (Internet X.509 Public Key Infrastructure) 1 http://www.wireshark.org/ KIT/ISPWE 9-8 Lukáš Čegan