Administracja systemami operacyjnymi Wiosna 2014 Wykład 3 Zaawansowane usługi sieciowe w Linux/UNIX – Apache i SSL dr inż. Wojciech Bieniecki Instytut Nauk Ekonomicznych i Informatyki http://wbieniec.kis.p.lodz.pl/pwsz
SSL SSL (Secure Socket Layer) to opracowany w 1994 roku protokół, służący do bezpiecznej transmisji zaszyfrowanego strumienia danych. SSL odpowiada za: szyfrowanie danych, miedzy warstwą transportu a warstwą aplikacji TCP autoryzację tożsamości serwera względem klienta. SSL standardowo oczekuje na zapytania na porcie 443.
Działanie SSL Protokół SSL funkcjonuje jako warstwa pośrednia między przeglądarką i usługami TCP/IP udostępnionymi na komputerze macierzystym. Przed wysłaniem komunikatu HTTP do usługi TCP/IP komputera macierzystego przeglądarka przekazuje go do warstwy SSL w celu zaszyfrowania. Warstwa SSL skonfigurowana na serwerze WWW rozszyfrowuje komunikat otrzymany od usługi TCP/IP, po czym przesyła go do serwera. Po zainstalowaniu i prawidłowym skonfigurowaniu serwera WWW żądania i odpowiedzi HTTP są szyfrowane automatycznie.
Etapy działania protokołu Przeglądarka nawiązuje połączenie z serwerem wykorzystującym SSL i żąda od niego uwierzytelnienia się. Serwer wysyła swój certyfikat cyfrowy Serwer może zażądać od przeglądarki uwierzytelnienia się. Przeglądarka wysyła listę obsługiwanych przez siebie algorytmów szyfrujących i funkcji mieszających. Przeglądarka i serwer generują klucze sesji: Przeglądarka odczytuje z certyfikatu cyfrowego serwera jego klucz publiczny i szyfruje nim losowo wybraną liczbę. Serwer wybiera z podaj listy najbezpieczniejszą metodę, którą jest w stanie obsłużyć. Serwer wysyła ciąg losowo wybranych danych w formie otwartego tekstu (chyba że przeglądarka na żądanie serwera udostępniła swój certyfikat cyfrowy – wówczas serwer wykorzysta zawarty w nim klucz publiczny przeglądarki do szyfrowania wysyłanych danych). Na podstawie wymienionych danych generowane są klucze sesji będące wynikiem wykonania funkcji mieszających.
Operacja wysyłania danych Dane zostają podzielone na niewielkie pakiety. Każdy pakiet może zostać skompresowany. Za pomocą odpowiedniego algorytmu mieszającego dla każdego pakietu zostaje obliczony kod uwierzytelniający. Skompresowane dane i ich kod uwierzytelniający zostają połączone i zaszyfrowane.
Operacja wysyłania danych Za pomocą odpowiedniego algorytmu mieszającego dla każdego pakietu zostaje obliczony kod uwierzytelniający. Skompresowane dane i ich kod uwierzytelniający zostają połączone i zaszyfrowane. Zaszyfrowane pakiety wraz z dołączonymi do nich nagłówkami informacji zostają wysłane do sieci.
SSL - Certyfikaty Certyfikat jest to zbiór danych jednoznacznie identyfikujących pewną jednostkę (na przykład osobę, lub komputer) oraz pozwalający stwierdzić, czy osoba, która się nim legitymuje jest rzeczywiście tym, za kogo się podaje. Jest on potwierdzony przez zaufaną organizację, zwaną w protokole SSL certificate authority (CA).(Urząd certyfikacji) Certyfikat zawiera: Nazwę certyfikowanego obiektu Identyfikator obiektu Klucz publiczny obiektu Czas ważności Nazwę wystawcy certyfikatu Identyfikator wystawcy Podpis wystawcy (To pole zawiera jednoznaczny skrót całego certyfikatu zaszyfrowany przy pomocy klucza prywatnego wystawcy.) 7
Urząd certyfikacji Urząd certyfikacji – podmiot, który wystawia certyfikaty cyfrowe. Certyfikat potwierdza własność klucza publicznego poprzez wskazanie podmiotu certyfikatu. Pozwala to innym powołującym się stronom polegać na podpisach złożonych przez klucz prywatny. Komercyjne urzędy certyfikacji pobierają opłatę za wydanie certyfikatów, które będą automatycznie zaufane przez większość przeglądarek internetowych Niektórzy dostawcy wydają cyfrowe certyfikaty do obrotu publicznego bez żadnych kosztów. Duże instytucje lub podmioty rządowe mogą mieć swoje własne centrum certyfikacji. W ogólnym przypadku mamy tak zwany łańcuch certyfikatów. Nie musimy (a nawet nie powinniśmy) dla każdego obiektu w danym systemie wystawiać certyfikatu potwierdzonego przez CA, gdyż spowodowałoby to przeciążenie tych instytucji i niepotrzebny rozrost bazy danych. Możemy na własne potrzeby ustanowić lokalny urząd certyfikacyjny który będzie poświadczał lokalne certyfikaty, a sam będzie legitymował się certyfikatem poświadczonym przez CA.
Instalacja OpenSSL – uzyskiwanie klucza i certyfikatu Aby zdobyć certyfikat SSL ptrzebujemy dwóch rzeczy: klucza prywatnego naszego hosta i tzw. żądania certyfikatu (ang. CSR: Certificate Signing Request). Obie wygenerujemy przy pomocy OpenSSL. Instalacja implementacji protokołów SSL #apt-get install openssl ssl-cert Generowanie klucza prywatnego # openssl genrsa -des3 -out www.mojadomena.pl.key 2048 OpenSSL podczas generowania klucza prywatnego poprosi o podanie hasła, którym zostanie zaszyfrowany klucz – nawet po przechwyceniu klucza, atakujący nie mógł z niego tak łatwo skorzystać. Generowanie CSR # openssl req -new -key www.mojadomena.pl.key -out www.mojadomena.pl.csr Plik www.mojadomena.pl.csr po podpisaniu przez zaufane centrum certyfikacji stanie się certyfikatem i będzie mógł zostać użyty do szyfrowania transmisji. 9
Podpisywanie certyfikatu Proces weryfikacyjny składa się z dwóch etapów: - umieszczenie pliku na serwerze lub umieszczenie ciągu znaków na stronie w domenie dla której staramy się o certyfikat - wysłanie maila z domeny (np. admin@mojadomena.pl, sysadmin@mojadomena.pl, root@mojadomena.pl), maile są zdefiniowane i mamy wybór spośród kilku opcji Jeśli weryfikacja się powiedzie, otrzymamy na podany adres e-mail identyfikator. Dzięki niemu będziemy mogli pobrać przez WWW podpisany certyfikat. Dane certyfikatu możemy wyświetlić przy użyciu polecenia openssl: # openssl x509 -in www.mojadomena.pl.crt -text Każdy podpisany certyfikat posiada okres ważności, termin ten jest zawarty w sekcji Validity: Not Before: Nov 17 13:58:12 2013 GMT Not After : Nov 18 13:58:12 2014 GMT Użycie niepodpisanego certyfikatu powoduje, że wyskakuje ostrzeżenie na przeglądarce
Instalacja certyfikatu Należy włączyć SSL pod apache #a2enmod ssl Tworzenie CSR-a – tak jak poprzednio + katalogi #mkdir /etc/apache2/ssl #cd /etc/apache2/ssl #openssl req -new -days 365 -nodes -keyout www.mojadomena.pl.key -out www.mojadomena.pl.csr Dopisujemy konfigurację w /etc/apache2/ports.conf <VirtualHost 10.0.2.15:443> SSLEngine On SSLCertificateFile /etc/apache2/ssl/www.mojadomena.pl.crt SSLCertificateKeyFile /etc/apache2/ssl/www.mojadomena.pl.key SSLCACertificateFile /etc/apache2/ssl/www.mojadomena.pl.cer ServerAdmin root@mojadomena.pl ServerName www.mojadomena.pl DocumentRoot /var/www/ssl ErrorLog /var/www/error.log </VirtualHost>
Wysyłanie do urzędu certyfikacji Wchodzimy na stronę http://www.thawte.com wybieramy trial ssl rejestrujemy się i wklejamy zawartość CSR Czekamy na weryfikację i odbiór plików przez e-mail Będą to: www.mojadomena.pl.cer www.mojadomena.pl.crt Należy je umieścić w katalogu /etc/apache2/ssl Chronimy nasze klucze: #chmod 400 /etc/apache2/ssl/www.mojadomena.pl.* Uwaga: konfiguracja na poprzednim slajdzie zakłada istnienie katalogu ze stroną WWW dostępną przez SSL Resetujemy serwer WWW i wchodzimy na stronę główną przez HTTP UWAGA: Trial SSL ważny jest przez 21 dni.
Konfiguracja wirtualnych hostów Przechodzimy do katalogu z konfiguracjami Apache # cd /etc/apache2/sites-available/ Tworzymy tutaj plik testowa_pl <VirtualHost *> ServerAdmin test@testowa.pl ServerName www.testowa.pl ServerAlias testowa.pl DirectoryIndex index.php index.html DocumentRoot /var/www/testowa_pl ErrorLog /var/log/apache2/testowa.pl-error.log CustomLog /var/log/apache2/testowa.pl-access.log combined </VirtualHost> # a2ensite testowa_pl
Ćwiczenia Na tym samym IP postaw dwie domeny wp.pl i onet.pl
Ćwiczenia Na jednym serwerze postaw dwie domeny na dwóch różnych IP Wymaga to utworzenia aliasu na interfejsie # ifconfig eth0:0 10.0.2.15 up
Ćwiczenia Postaw tę samą stronę na dwóch różnych IP Server configuration NameVirtualHost 10.0.2.15 NameVirtualHost 10.0.2.16 <VirtualHost 10.0.2.15 10.0.2.16> DocumentRoot /www/server1 ServerName server.example.com ServerAlias server </VirtualHost>
Ćwiczenia Postaw różne strony na różnych portach tego samego IP Listen 80 Listen 8080 NameVirtualHost 10.0.2.15:80 NameVirtualHost 10.0.2.15:8080 <VirtualHost 10.0.2.15:80> ServerName www.example.com DocumentRoot /www/domain-80 </VirtualHost> <VirtualHost 10.0.2.15:8080> ServerName www.example.com DocumentRoot /www/domain-8080 </VirtualHost> <VirtualHost 10.0.2.15:80> ServerName www.example.org DocumentRoot /www/otherdomain-80 </VirtualHost>