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 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
Miejsce SSL w modelu ISO OSI:
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 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.
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
Ustanowienie sesji odbywa się według następującego schematu:
1. Klient inicjuje sesję:
2. Serwer odpowiada na żądanie klienta:
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.
3. Klient opracowuje odpowiedź serwera
3.1 Klient weryfikuje certyfikat serwera:
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.
4. Serwer odpowiada klientowi: