Instytut Informatyki, Automatyki i Robotyki Zastosowania informatyki w gospodarce Wykład 8 Protokół SSL dr inż. Dariusz Caban dr inż. Jacek Jarnicki dr inż. Tomasz Walkowiak
Protokoły SSL oraz TLS Określenia SSL Secure Socket Layer TLS Transport Layer Security Opracowany przez Netscape Communications Corp. Wiodąca implementacja przez RSA Securities posiadali patenty na większość stosowanych algorytmów kryptograficznych Bardzo dobre implementacje publiczne autorstwa E. Young (SSLeay) oraz OpenSSL Protokół stosowany w: https (http po łączach szyfrowanych protokołem SSL) Pops, imaps (protokoły pocztowe po SSL) 2
Składowe protokołu SSL Połączenie szyfrowane szyfrem symetrycznym Dopuszczalne są różne algorytmy szyfrujące Przy nawiązywaniu połączenia ustalany jest najbezpieczniejszy znany dla serwera i klienta Można uzgodnić połączenie nie szyfrowane, jedynie chronione pod względem integralności znacznikami MAC Klucz szyfrujący/deszyfrujący ustalany jest losowo dla każdej sesji (połączenia) Protokół bez wspólnej tajemnicy (without shared secret) Implementowane są różne algorytmy bezpiecznej wymiany klucza (Diffie-Hoffman, RSA) Przy nawiązaniu połączenia uwierzytelnienie serwera w oparciu o jego certyfikat Ustalanie klucza i uwierzytelnienie serwera w jednym kroku 3
SSL Record Protocol Protokół przesyłania danych między bezpiecznymi gniazdami Etapy przetwarzania Podział na rekordy Kompresja Dołączenie MAC i/lub szyfrowanie Przesyłanie pakietami TCP Bieżący stan protokołu ustala parametry przetwarzania Protokoły wykorzystujące SSL RP SSL Handshake Protocol SSL Change Cipher Spec SSL Alert Protocol Protokół aplikacyjny 4
Nawiązanie połączenia SSL ClientHello/ServerHello Ustalenie wersji protokołu SSL Uzgodnienie zestawu szyfrów Cipher Suite Metoda wymiany klucza sesyjnego (RSA, Diffie-Hellman) Szyfr symetryczny Null encoding RC4 40/128 RC2 40 AES 128/256 3DES, IDEA, Fortezza Algorytm wyznaczania skrótów (do wyznaczania MAC) Null, MD5, SHA1 Uzgodnienie metody kompresji Uzgodnienie klucza sesyjnego Uwierzytelnienie serwera i (opcjonalnie) klienta 5
Uzgodnienie klucza sesyjnego Algorytm RSA Serwer przesyła nonce jawnie i zaszyfrowany kluczem prywatnym Klient odczytuje nonce i rozszyfrowuje go kluczem publicznym z certyfikatu Podstawowy algorytm Diffie Hellman Nie wymaga wcześniejszych uzgodnień Zasada: Jawnie znane: liczba pierwsza p oraz inna liczba g < p Serwer wybiera/losuje TAJNĄ liczbę S Serwer wyznacza T = g^s mod p Serwer przesyła do klienta (p, g, T) jawnym tekstem! Klient wybiera losowo liczbę W Klient wyznacza TAJNY klucz sesyjny K = T^W mod p Klient przesyła do serwera V = g^w mod p jawnym tekstem! Serwer wyznacza klucz sesyjny K = V^S mod p Uzasadnienie: V^S = g^ws = T^W = K (mod p) 6
Oprogramowanie Pakiet OpenSSL Publiczna implementacja bibliotek SSL i TLS (openssl.so) Publiczna implementacja biblioteki algorytmów kryptograficznych (libcrypto.so) Implementacja podstawowych narzędzi dla centrum autoryzacji system openssl Serwer Apache z obsługą protokołu SSL (Apache/ModSSL) Pakiet Stunnel Prosta aplikacja komunikująca się ze zdalnym komputerem po łączu szyfrowanym protokołem SSL Tunelowanie u klienta: aplikacja bez SSL -> stunnel => serwer z SSL Tunelowanie na serwerze: klient SSL => stunnel -> serwer bez SSL 7
HTTPS Pakiety wymieniane w protokole HTTP Do wymiany wykorzystywany SSL / TLS Aby klient wiedział, że dokument należy obsługiwać po łączu szyfrowanym, URL ma postać: https://normalny_adres_url Domyślny port, pod którym serwery nasłuchują zapytań HTTPS Nie jest portem 80 (domyślny dla HTTP) Jest to port 443 Dzięki temu na tym samym komputerze mogą być równolegle uruchomione odrębne serwery http i https Strony łączące obiekty przesyłane w HTTP i HTTPS 8
Apache z mod_ssl Dwie niezależne implementacje serwera Apache z szyfrowaniem SSL Apache / mod_ssl Apache-SSL Apache / mod_ssl wymaga zainstalowania bibliotek OpenSSL rekompilacji serwera Apache z poprawkami (patch) implementującymi EAPI zainstalowania modułu mod_ssl wersja modułu musi być zgodna z wersją serwera Apache <mod_ssl-version>-<apache-version> skonfigurowania serwera w pliku httpd.conf uruchomienia SSLEngine on 9
Konfiguracja mod_ssl - certyfikaty SSLCertificateFile i SSLCertificateKeyFile Wskazują ścieżki do plików z certyfikatem serwera oraz z kluczem prywatnym (jeżeli to inny plik) Konieczne, ponieważ serwer HTTPS musi przedstawiać się swoim certyfikatem Nazwa CN musi pokrywać się z adresem DNS Pliki w kodzie PEM Mogą wystąpić osobne dyrektywy wskazujące certyfikaty z szyfrem RSA i DSA SSLPassPhraseDialog Jak httpd ma uzyskać hasło do zaszyfrowanego klucza SSLCertificateChainFile Plik powinien zawierać certyfikaty wszystkich CA podpisujących certyfikat serwera (całą ścieżkę certyfikacji) w pliku PEM 10
Autoryzacja przez certyfikaty klientów SSLVerifyClient Może być: none, optional, optional_no_ca, require SSLVerifyDepth Maksymalna liczba pośrednio weryfikowanych CA w ścieżce Powinna być mała, 1 => certyfikat podpisany przez CA znane serwerowi SSLCACertificatePath Katalog zawierający wszystkie certyfikaty CA, uznawane za znane przez serwer Do każdego pliku z certyfikatem należy utworzyć dowiązanie symboliczne o nazwie wartość-hash.n Nazwę dowiązania otrzymuje się ze skrótu nazwy DN SSLCARevocationPath Katalog zawierający listy unieważnionych certyfikatów dla zainstalowanych CA z linkami wartość-hash.rn SSLCACertificateFile, SSLCARevocationFile 11
Elektroniczna obsługa kont bankowych Realizowana poprzez bezpieczny serwis HTTPS Certyfikat serwera powinien zapobiegać podszywaniu się Podpisany przez zaufanego dostawcę certyfikatów (np. VeriSign, Entrust) Serwer wymusza bezpieczny poziom szyfrowania Dostęp do serwisu wymaga uwierzytelnienia Proste hasło (niebezpieczeństwo przechwycenia przez oprogramowanie lokalne) Hasła jednorazowe Tokeny identyfikacyjne Niektóre operacje wymagają dodatkowego potwierdzenia PIN przesłany SMS em na telefon użytkownika Autoryzacja telefoniczna 12
Przelew bankowy Przekazanie środków pieniężnych z jednego konta na drugie Płatnik inicjuje przelew ze swojego konta, podając konto odbiorcy (IBAN) Bank płatnika przekazuje do banku odbiorcy polecenie udostępnienia środków na koncie odbiorcy (poprzez bezpieczne połączenie np. SWIFT) Komunikat zawiera również informacje do rozliczenia międzybankowego Jeżeli pomiędzy bankami nie ma porozumienia dot. rozliczeń, to przelew poprzez bank korespondencyjny W Polsce pośrednikiem jest Elektroniczna Izba Rozrachunkowa ELIXIR Opłata za przelew Pokrywana przez płatnika lub odbiorcę lub obie strony Może być bardzo wysoka w przypadku przelewów międzynarodowych Dyrektywa unijna ogranicza wysokość opłat w obrębie 32 krajów SEPA (do poziomu opłat lokalnych) Ryzyko transakcji Stosunkowo bezpieczne, uwierzytelnienie nadawcy i odbiorcy Ryzyko związane z anonimowym odbiorcą Podatne na oszustwo transakcja jest nieodwracalna 13