SSL VPN Virtual Private Network with Secure Socket Layer Wirtualne sieci prywatne z bezpieczną warstwą gniazd Autorem niniejszej prezentacji jest Paweł Janicki @ 2007
SSL The Secure Socket Layer Protokół SSL stanowi warstwę, która może zostać umieszczona pomiędzy warstwą niezawodnego i zorientowanego połączeniowo protokołu (np. TCP) i warstwą protokołu aplikacji (np. HTTP). SSL zapewnia bezpieczną komunikację pomiędzy klientem i serwerem poprzez umożliwienie wzajemnego uwierzytelnienia, użycie cyfrowego podpisu do kontroli integralności i szyfrowania dla poufności. Protokół jest zaprojektowany do wsparcia zakresu specyficznych algorytmów używanych do kryptografii, skrótów i podpisów. Wybór jest negocjowany pomiędzy klientem a serwerem podczas rozpoczynania sesji protokołu. Wersja Źródło Opis Wsparcie przeglądarek SSL v2.0 Standard dostawcy Pierwszy protokół SSL o istniejących implementacjach -NS Navigator 1.x/2.x - MS IE 3.x - Lynx/2.8 + OpenSSL SSL v3.0 Wygasły szkic standardu Internetu Dokonany przegląd w celu zapobieżenia specyficznym atakom na bezpieczeństwo, dodane szyfry inne niż RSA, wsparcie dla łańcuchów certyfikatów -NS Navigator 2.x/3.x/4.x -MS IE 3.x/4.x -Lynx/2.8 + OpenSLL TLS v1.0 Zaproponowany standard Internetu Przegląd SSL 3.0 uaktualniający warstwę MAC do HMAC, więcej alertów,... - Lynx/2.8+OpenSSL
SSL The Secure Socket Layer Sesja SSL jest ustanawiana poprzez nastąpienie sekwencji powitania pomiędzy klientem i serwerem. Przebieg sekwencji jest zależny od tego czy serwer jest skonfigurowany do udostępnienia certyfikatu serwera lub żądania certyfikatu klienta. Raz rozpoczęta sesja SSL może być ponownie wykorzystana jako że serwer przypisuje jej unikalny identyfikator, który jest buforowany i mogący być użyty ponownie przez klienta w celu zmniejszenia czasu na powitanie. WitajKlienta WitajSerwera Ustalić wersję protokołów, id sesji, zestaw szyfrów, metodę kompresji. Wymiana wartości losowych Certyfikat ŻądanieCertyfikatu SkończoneWitajSerwera Opcjonalne wysłanie certyfikatu serwera i żądanie certyfikatu klienta Certyfikat VeryfikacjaCertyfikatu Jeśli konieczne nadanie odpowiedzi w postaci certyfikatu klienta. ZmianaParametrówSzyfrowania Skończone ZmianaParemetrówSzyfrowania Skończone Zmiana zestawu szyfrów i skończenie powitania klient serwer Ilustracja 1: Sekwencja powitania
SSL The Secure Socket Layer Zestaw szyfrów jest zdefiniowany przez następujące komponenty: Metodę wymiany kluczy, Szyfr transferowanych danych, Algorytm skrótu wiadomości. Metoda wymiany kluczy definiuje w jaki sposób zostanie uzgodniony współdzielony przez klienta i serwer tajny klucz kryptografii symetrycznej używanej do transferu danych aplikacji. SSL 3.0 wspiera wymianę przy użyciu algorytmów RSA (gdy używane są certyfikaty) i Diffie- Hellman (do wymiany kluczy bez certyfikatów). Jedyną zmienną w metodzie wymiany kluczy jest użycie lub nie cyfrowych podpisów. Podpis kluczem prywatnym zapewnia ochronę przed atakiem typu człowiek w środku podczas wymiany informacji użytej do generacji klucza dzielonego. SSL stosuje konwencjonalną symetryczną kryptografię do szyfrowania wiadomości przesyłanych w sesji. Istnieje dziewięć wyborów sposobu szyfrowania: Brak szyfrowania Szyfry strumieniowe: RC4 klucz 40b lub 128b Szyfry blokowe CBC: RC2 klucz 40b, DES klucz 40b, DES klucz 56b, Fortezza klucz 96b, Idea klucz 128b, Triple-DES klucz 168b. ) CBC Cipher Block Chaining porcja poprzedniego szyfrogramu jest używana do szyfrowania nastepnego bloku. ) Idea jeden z najlepszych i najsilniejszych dostępnych algorytmów.
SSL Virtual Private Network with Secure Socket Layer Skrót wiadomości jest używany do wytworzenia MAC szyfrowanego wraz z wiadomością w celu kontroli integralności i ochrony przed atakami typu ponowienie. Wybór funkcji skrótu determinuje w jaki sposób generowany jest skrót. SSL wspiera następujące: Brak skrótu, MD5, skrót 128b, Secure Hash Algorithm (SHA-1), skrót 160b. Sekwencji powitania stosuje trzy protokoły: SSL Handshake do rozpoczęcia sesji pomiędzy klientem a serwerem SSL Change Cipher Spec Protocol do zatwierdzenia obecnego zestawu szyfrów. SSL Alert Protocol do przekazywania wiadomości o błędach pomiędzy klientem i serwerem
SSL The Secure Socket Layer Protokoły wraz z danymi aplikacji są kapsułkowane w SSL Record Protocol. Kapsułka protokołu jest przesyłana jako dane protokołu warstwy niższej, który nie analizuje danych. SSL HandshakeP rotocol SSL Change Cipher Spec SSL Alert Protocol HTTP Telnet... SSL Record Protocol TCP IP Ilustracja 2: Stos protokołów SSL Kapsułkowanie protokołów sterujących SSL poprzez SSL Record Protocol oznacza to, że jeśli aktywna sesja jest renegocjowana protokoły sterujące będą przesyłane bezpiecznie. Jeśli nie ma poprzedniej sesji stosowany jest pusty zestaw szyfrów, co oznacza brak szyfrowania, wiadomości nie będą posiadały skrótów, aż do ustanowienia sesji.
SSL The Secure Socket Layer Transmisja danych SSL Record Protocol jest stosowany do przesyłania danych aplikacji i sterujących SSL pomiędzy klientem i serwerem, gdzie konieczne dzielenie tych danych do mniejszych jednostek lub łączenie wielu wiadomości z protokołów warstw wyższych do pojedynczych jednostek. Może dokonać kompresji, dołączyć sygnatury w postaci skrótów i zaszyfrować te jednostki przed wysłaniem poprzez niezawodny protokół transportowy warstwy niższej. (Notka: Współczesne ważniejsze implementacje SSL nie wspierają kompresji.) Dane aplikacji abcdefghi Fragmentacja / Scalanie Jednostki SSL Record Protocol abc def ghi Kompresja Jednostka skompresowana MAC Szyfrowanie Szyfrogram Transmisja Pakiet TCP Ilustracja 3: SSL Record Protocol
SSL VPN Virtual Private Network with Secure Socket Layer Określenie SSL VPN jest używanie w odniesieniu do kategorii produktów łączących różne technologie. VPN czyli wirtualna siec prywatna odnosi się do praktyki używania sieci publicznej jak np.. Internet do transmisji danych prywatnych. Do końca 2001 roku większość IT nie dodawała określnika dla VPN ponieważ praktycznie wszystkie dostępne w tym czasie VPN używały jakiegoś rodzaju transportu po warstwie sieci. Przykłady aplikacji: Microsoft Outlook Web Access, Lotus inotes. Przykłady przypadków użycia: Dostęp do telepracowników, który potrzebują aplikacji opartych na Web, Dostęp do określonych plików/url dla partnerów i klientów, Dostęp do specyficznych plików/url dla użytkowników. Bankowość elektroniczna Usługi terminalowe
SSL HTTPS Hyper Text Transport Secure by Secure Socket Layer Instalacja i uruchomienie serwera Apache SSL HTTPS w środowisku Win32. Potrzebne pakiety instalacyjne: apache_2.2.3-win32-x86-no_ssl.msi Apache_2.2.3-Openssl_0.9.8d-Win32.zip Win32OpenSSL-0_9_8d.exe Instalacja: 9. Uruchomić instalator serwera HTTP Apache.msi i zainstalować pakiet w katalogu C:\apache. 10. Rozpakować wszystkie pliki archiwum.zip do C:\apache zastępując już istniejące 11. Zainstalować pakiet OpenSSL w katalogu C:\OpenSSL
SSL HTTPS Hyper Text Transport Secure by Secure Socket Layer Generacja podpisanego przez siebie certyfikatu. 2. Utworzenie klucza prywatnego C:\OpenSSL\bin> openssl genrsa des3 rand file1:file2:file3 out server.key 1024 file1, file 2... Są skompresowanymi plikami z losowanymi danymi. Ich użycie jest opcjonalne. Podczas generacji klucza będzie trzeba podać frazę hasła. Należy użyć prostego ciągu znaków. 2. Usunięcie frazy hasła z klucza prywatnego C:\OpenSSL\bin> openssl rsa in server.key out server.pem C:\OpenSSL\bin> del server.key 3. Utworzenie żądania podpisu certyfikatu C:\OpenSSL\bin> openssl req new key server.pem out server.csr WAŻNE: W polu Common Name podać nazwę domenową serwera np. www.server.com 4. Podpisanie certyfikatu. W celach testowych istnieje możliwość samodzielnego podpisania wygenerowanego certyfikatu. W przypadku produkcyjnym należy zgłosić się do CA. C:\OpenSSL\bin> openssl x509 req days 60 in server.csr signkey server.pem out server.crt
SSL HTTPS Hyper Text Transport Secure by Secure Socket Layer Instalacja certyfikatu i konfiguracja serwera. C:\OpenSSL\bin> copy server.crt C:\apache\conf C:\OpenSSL\bin> copy server.pem C:\apache\conf\server.key C:\OpenSSL\bin> del server.* Należy dokonać edycji pliku C:\apache\conf\httpd.conf. Usunąć znak hasz # z linii: #LoadModule ssl_module modules/mod_ssl.so Dodać wpis: listen 443 <VirtualHost _default_:443> DocumentRoot "C:/apache/htdocs" ServerName www.somenet.com:443 ServerAdmin admin@mail.server.pl ErrorLog "C:/apache/logs/error_log" TransferLog "C:/apache/logs/access_log" SSLEngine on SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL SSLCertificateFile "C:/apache/conf/server.crt" SSLCertificateKeyFile "C:/apache/conf/server.key" </VirtualHost>
SSL HTTPS Hyper Text Transport Secure by Secure Socket Layer
SSL HTTPS Hyper Text Transport Secure by Secure Socket Layer Bibliografia: Steven Taylor SSL VPNs: The Secure Access Landscape http://www.juniper.net/solutions/literature/white_papers/tech_ssl.pdf Apache HTTP Server Documentation: Apache SSL/TLS Encryption http://httpd.apache.org/docs/2.0/ssl/