SSL (ang. Secure Sockets Layer) to protokół używany do nawiązywania bezpiecznych połączeń
sieciowych i bezpiecznej wymiany informacji. Został opracowany przez firmę Netscape Communications.
SSL ma dwa zadania:
- umożliwia uczestnikom wymiany informacji identyfikację i weryfikację tożsamości
drugiej strony przy użyciu certyfikatów cyfrowych (ang. digital
certificates)
- szyfrowaną wymianę poufnych danych
Z założenia
ma uzupełniać protokoły już istniejące, działające poniżej warstwy
aplikacji (HTTP, FTP, SMTP, POP3, Telnet), a powyżej warstwy sieci i
transportu.
SSL jest protokołem otwartym i rozszerzalnym, nie wymagającym konkretnego
algorytmu szyfrującego. Protokół daje każdej stronie połączenia możliwość
zaproponowania obsługiwanych przez siebie algorytmów szyfrujących i wybór
jednego jako obowiązującego dla obu stron.
Certyfikaty SSL
Certyfikaty cyfrowe są mechanizmem pozwalającym na identyfikację czegoś
(osoby bądź serwera sieciowego). Certyfikat cyfrowy zawiera informację, która
weryfikuje tożsamość użytkownika, gwarantując, że posiadacz takiego
certyfikatu jest rzeczywiście tym, za kogo się podaje. Certyfikaty są
przyznawane przez CA (Certificate Authorities) - niezależne źródła,
upoważnione przez odpowiednie instytucje (jak np. banki, rządy, itp.). Poza
informacją identyfikacyjną certyfikat cyfrowy zawiera także klucz publiczny
jego posiadacza.
W pierwszej fazie nawiązywania połączenia serwer i przeglądarka wymieniają
certyfikaty. Certyfikat zawiera następujące składniki:
- nazwę właściciela certyfikatu
- nazwę wydawcy certyfikatu
- publiczny klucz właściciela dla algorytm asymetrycznego
- cyfrowy podpis wystawcy certyfikatu (np. Verisign)
- okres ważności
- numer seryjny (tzw. fingerprint)
Typy certyfikatów związanych z SSL:
-
Certyfikat CA - Jest
to zbiór informacji reprezentujących tożsamość danej instytucji
certyfikującej. Obecność podpisu danego
CA na certyfikacie serwera oznacza, że CA zaakceptował dowody
przedstawione przez firmę występującą o podpis i swoim certyfikatem poświadcza
autentyczność serwera.
-
Certyfikat serwera - Jest
to zbiór informacji reprezentujących tożsamość danego serwera. Certyfikat
serwera musi być opatrzony podpisem CA.
-
Certyfikat osobisty -
Znacznie mniej rozpowszechniony typ certyfikatu. Firmy, które promują używanie
tego certyfikatu nazywają go cyfrowym paszportem.
Wraz z podpisem odpowiedniego CA pozwala
potwierdzić tożsamość jako klienta.
-
Certyfikat atrybutu -
Został zaproponowany przez Netscape jako rozszerzenie istniejących
certyfikatów. Sam w sobie nie stanowi
dowodu tożsamości. Podstawowe zastosowanie to np. przyznawanie tymczasowego
prawa podpisywania certyfikatów.
Handshake
Uścisk dłoni przebiega według następującego schematu:
- Klient wysyła serwerowi numer swojej wersji SSL, ustawienia algorytmu
kodującego, jakieś losowe dane i inne informacje, które serwer potrzebuje
do komunikacji z klientem przez SSL.
- Serwer przesyła klientowi numer swojej wersji SSL, ustawienia algorytmu
szyfrującego, i inne informacje jakie klient potrzebuje do komunikacji z
serwerem przez SSL. Serwer przesyła również swój certyfikat i - jeśli
klient żąda zasobu, który wymaga uwierzytelnienia odbiorcy - również
zapytanie o certyfikat klienta.
- Klient używa informacji przesłanej przez serwer do uwierzytelnienia
serwera. Jeśli serwer nie może zostać uwierzytelniony, komunikacja
zostaje zerwana, jeśli może, to klient kontynuuje (punkt 4).
- Klient szyfruje za pomocą klucza publicznego serwera pewne wstępne dane
(premaster secret) i przesyła je do serwera.
Jeśli serwer żądał uwierzytelnienia klienta, klient wysyła swój
certyfikat razem z podpisem elektronicznym (czyli z losowymi danymi
unikatowymi dla tej sesji, znanymi obu stronom komunikacji, zaszyfrowanymi
kluczem prywatnym klienta).
- Jeśli serwer żądał uwierzytelnienia klienta, sprawdza przysłane przez
klienta dane, jeśli klient nie może zostać uwierzytelniony, komunikacja
zostaje zerwana. Jeśli sesja trwa dalej, serwer używa swojego klucza
prywatnego do rozkodowania danych przesłanych przez klienta (premaster
secret), a następnie wykonuje szereg kroków w celu wygenerowania tzw. master
secret. Te same kroki wykonuje równocześnie klient.
- Master secret jest używany przez serwer i klienta do wygenerowania
kluczy sesji - symetrycznych kluczy do szyfrowania i rozszyfrowywania
danych i do zapewnienia ich integralności (wykrywania cudzej ingerencji w
treść przesyłanych komunikatów).
- Klient przesyła serwerowi komunikat o gotowości swojego klucza i
oddzielny, zaszyfrowany komunikat, że etap "uścisku dłoni" po
stronie klienta zakończył się.
- Serwer przesyła klientowi komunikat o gotowości swojego klucza i
oddzielny, zaszyfrowany komunikat, że etap "uścisku dłoni" po
stronie serwera zakończył się.
- Etap "uścisku dłoni" zakończył się, teraz klient i serwer używają
wygenerowanego klucza do przesyłania informacji między sobą.
Algorytmy stosowane w SSL
Protokół SSL wspiera użycie wielu różnych algorytmów kryptograficznych
lub szyfrów, dla takich operacji jak autoryzacja serwera i klienta, transmisja
certyfikatów i ustanowienie kluczy sesyjnych.
Algorytmy używane w SSL:
- DES (ang. Data Encryption Standard) - algorytm szyfrowania
symetrycznego
- DSA (ang. Digital Signature Algorithm) - część standardu
cyfrowego uwierzytelniania
- KEA (ang. Key Exchange Algorithm) - algorytm wymiany kluczy
- MD5 (ang. Message Digest) - funkcja skrótu używana do generowania
podpisów cyfrowych opracowna przez Digest
- RC2 i RC4 - szyfry symetryczne opracowane przez Rivesta
- RSA - algorytm z kluczem publicznym używany do szyfrowana opracowany
przez Rivesta, Shamira i Adlemana
- RSA key exchange - algorytm wymiany kluczy dla SSL oparty na algorytmie
RSA
- SHA-1 (ang. Secure Hash Algorithm)
- Triple-DES - potrójny DES
dalej