SSL (Secure Socket Layer)
Transkrypt
SSL (Secure Socket Layer)
SSL (Secure Socket Layer) SSL --- Secure Socket Layer --- protokół bezpiecznej komunikacji między klientem a serwerem, stworzony przez Netscape. SSL w założeniu jest podkładką pod istniejące protokoły, takie jak HTTP, FTP, SMTP, NNTP i Telnet. Powszechnie jest używane głównie HTTPS (HTTP na SSL). W tej chwili istnieją dwie specyfikacje SSL: SSL 2.0 SSL 3.0. Wersja 3.0 ma poprawione wiele słabości SSL 2.0 oraz umożliwia kompresję danych. SSL 3.0 jest wstecznie kompatybilne z 2.0. SSL (Secure Socket Layer) SSL może zapewniać cztery rzeczy: prywatność --- połączenie jest szyfrowane i deszyfrowanie, uzgadniane są algorytmy kodowania (używane jest kodowanie symetryczne np. DES lub RC4) autoryzację --- klient i serwer określa swoją tożsamość poprzez systemy certyfikatów oraz mechanzimy kodowania z kluczem publicznym (zwykle RSA) integralność przesyłanych danych --- przez sumy kontrolne, MAC (Message Authentication Code) niezaprzeczalność – poprzez certyfikaty, podpisy elektroniczne SSL (Secure Socket Layer) Miejsce SSL w modelu ISO OSI: SSL (Secure Socket Layer) SSL można umieścić pomiędzy warstwą transportową i warstwą aplikacyjną. Ponadto jest to protokół dwupoziomowy. Wyższy poziom działający bezpośrednio nad stabilnym protokołem warstwy transportowej (np. TCP) jest to tzw. SSL Record Protocol używany dla enkapsulacji protokołów wyższych warstw oraz SSL Handshake Protocol (drugi poziom) wykorzystywany do wzajemnej autentyfikacji klienta i serwera, uzgodnienia algorytmów kodowania oraz wymiany kluczy kryptograficznych zanim nastąpi przesyłanie danych. SSL (Secure Socket Layer) SSL pobiera komunikat od aplikacji, fragmentuje go na zarządzalne bloki (w tzw. SSLPlainText rekordy o rozmiarze 2^14 bajtów lub mniejsze, może to być pojedynczy lub wiele komunikatów aplikacji), opcjonalnie kompresuje dane (używając uzgodnionej metody kompresji), dodaje MAC (wyliczony uzgodnioną metodą funkcji skrótu), koduje (używając ustalonego algorytmu kodowania sysmetrycznego) i transmituje otrzymane dane. Otrzymywane dane są dekodowane, weryfikowane, dekompresowane, odbudowywane i przekazywane do protokołu aplikacyjnego. SSL (Secure Socket Layer) SSL (Secure Socket Layer) Wszystko to odbywa się w ramach ustalonej pomiędzy komunikujacymi się obiektami sesji. Ustanowienie tej sesji jest zadaniem SSL Handshake Protocol, który nawiązuje sesję i wymienia inforamacje parametryzujące sesję, takie jak: identyfikator sesji certyfikaty potwierdzające tożsamość komunikujących się obiektów – zgodne z X.509 metodę kompresji algorytm kodowania danych (null, DES itp.) metodę funkcji skrótu (MD5, SHA) sekretne hasło związane z kodowaniem symetrycznym SSL (Secure Socket Layer) Ustanowienie sesji odbywa się według następującego schematu: SSL (Secure Socket Layer) 1. Klient inicjuje sesję: SSL (Secure Socket Layer) 2. Serwer odpowiada na żądanie klienta: SSL (Secure Socket Layer) Po wysłaniu komunikatu Hello przez serwer, serwer wysyła swój certyfikat do klienta jeżeli potrzebuje się autentyfikować. Dodatkowo może być wygenerowany komunikat wymiany klucza np. gdy serwer nie posiada certyfikatu. Ponadto serwer może zażądać certyfikatu od klienta. Na koniec tej fazy serwer wysyła powtórnie komunikat Hello. SSL (Secure Socket Layer) 3. Klient opracowuje odpowiedź serwera SSL (Secure Socket Layer) 3.1 Klient weryfikuje certyfikat serwera: SSL (Secure Socket Layer) 3.2 Następnie klient generuje i przesyła do serwera tajny klucz, który będzie uzywany do kodowania danych. Klucz ten jest zakodowany używając metody kodowania z kluczem publicznym. 3.3 Klient wysyła swój certyfikat jeżeli serwer tego żądał 3.4 Klient wysyła komunikat weryfikujący certyfikat serwera. SSL (Secure Socket Layer) 4. Serwer odpowiada klientowi: