Łukasz Przywarty 171018 Wrocław, 13.11.2012 r. Grupa: WT/N 11:15-14:00 Sprawozdanie z zajęć laboratoryjnych: OpenSSL Prowadzący: mgr inż. Mariusz Słabicki 1 / 9
1. Treść zadania laboratoryjnego Podczas zajęć należało kolejno: utworzyć własne CA, zmodyfikować plik konfiguracyjny OpenSSL tak, aby znajdowały się w nim właściwe parametry nowego CA, utworzyć i podpisać certyfikat serwera, utworzyć i podpisać przez CA kilku certyfikatów klientów, zapisać je w postaci pliku PKCS12, skonfigurować serwer Apache do używania certyfikatu serwera i nawiązywania komunikacji po https://, skonfigurować Firefox do używania certyfikatu klienckiego, skonfigurować serwer Apache tak, by wybrane katalogi udostępniał tylko użytkownikom posiadającym certyfikat klienta. 2. Realizacja zadań laboratoryjnych 2.1 Utworzenie własnego CA 1. Pracę należy rozpocząć od wygenerowania zabezpieczonego hasłem klucza własnego CA. W momencie wycieku klucza bez hasła, będzie on bezużyteczny. Bazując na utworzonym kluczu zostanie wygenerowany właściwy certyfikat CA. Uwaga: wszystkie komendy są wydawane w katalogu domowym (w tym przypadku home/q), wszystkie hasła to bus12. Listing 1: Krok 1 openssl genrsa -des3 -out ca.key 8192 2. Wygenerować samodzielnie podpisany certyfikat. Należy odpowiadać na pytania generowane przez narzędzie (kraj, region, nazwa firmy itd.). Listing 2: Krok 2 openssl req -new -x509 -extensions v3_ca -key ca.key -out ca.crt -days 3650 2 / 9
3. Utworzyć strukturę katalogów niezbędną do generowania i przechowywania certyfikatów i kluczy własnego CA. Listing 3: Krok 3 mkdir -m 0700 \CA \CA/certs \CA/crl \CA/newcerts \CA/private 4. Należy przenieść wygenerowany wcześniej klucz do katalogu CA/private a certyfikat do CA/certs. Listing 4: Krok 4 mv ca.key CA/private mv ca.crt CA/certs 5. Oprócz struktury katalogów, OpenSSL wymaga dedykowanych plików. Trzeba je utworzyć. Listing 5: Krok 5 touch CA/index.txt echo 1000 > CA/serial 6. Należy upewnić się, że klucz może być odczytany tylko przez użytkownika z kontem roota i w razie potrzeby zmodyfikować uprawnienia. Listing 6: Krok 6 chmod 0400 CA/private/ca.key 2.2 Modyfikacja openssl.conf 1. Należy odszukać na dysku plik openssl.cnf. Najłatwiej skorzystać z komendy z listingu 7 i zlokalizować zmienną OPENSSLDIR (w przypadku systemu Ubuntu będzie to /usr/lib/ssl) Listing 7: Krok 1 openssl version -a 2. Dokonać edycji pliku openssl.conf. Listing 8: Krok 2a sudo gedit /etc/ssl/openssl.cnf 3 / 9
Należy wyszukać fragment zawarty w listingu 9 i zmodyfikować zmienne dir, certificate, private_key (na ścieżki utworzone w punkcie 2.1). Można również zmodyfikować domyślne dane własnego CA (countryname_default etc.) Listing 9: Krok 2b certificate = $dir/certs/ca.crt # The CA certificate serial = $dir/serial # The current serial number crlnumber = $dir/crlnumber # the current crl number # must be commented out to leave a V1 CRL crl = $dir/crl.pem # The current CRL private_key = $dir/private/ca.key # The private key RANDFILE = $dir/private/.rand # private random number file 2.3 Utworzenie i podpisanie certyfikatu serwera 1. Wygenerować certyfikat serwera. Listing 10: Krok 1 openssl req -new -nodes -keyout CA/private/server.key -out server.csr -days 3650 2. Należy zadbać o prywatność klucza. Listing 11: Krok 2 chmod 400 CA/private/server.key 3. W tym miejscu można przejść do podpisywania certyfikatu serwera. Listing 12: Krok 3 openssl ca -policy policy_anything -out CA/certs/server.crt -infiles server.csr 2.4 Utworzenie i podpisanie przez CA certyfikatów dla klientów 1. Utworzyć klucz (user.key) oraz certyfikat (user.csr) poprzez wygenerowanie certificate signing requests. Listing 13: Krok 1 openssl req -new -nodes -keyout CA/private/user1.key -out user1.csr 2. Podpisać żądania za pomocą klucza CA: 4 / 9
Listing 14: Krok 2 openssl ca -policy policy_anything -out CA/certs/user1.crt -infiles user1.csr 3. Połączyć podpisany certyfikat (user1.csr) i klucz (user.key) do jednego pliku (user1.pem). Listing 15: Krok 3 cat CA/private/user1.key CA/certs/user1.crt > CA/certs/user1.pem 4. Wyeksportować certyfikat użytkownika do pliku PKCS12. Listing 16: Krok 4 openssl pkcs12 -export -out CA/certs/user1.pfx -in CA/certs/user1.pem -name "Marek Przywarty" 5. Kroki 1-4 należy powtarzać dla wszystkich użytkowników, których certyfikaty trzeba utworzyć. 2.5 Skonfigurowanie Apache WWW do używania certyfikatu. 1. Upewnić się, że serwer Apache jest zainstalowany i uruchomiony. 2. Zamienić certyfikaty serwera nowymi certyfikatami (należy sprawdzić ścieżki w swoim środowisku - dla przykładu - XAMPP 1.8.1): Listing 17: Krok 2 sudo cp /opt/lampp/etc/ssl.crt/server.crt /opt/lampp/etc/ssl.crt/server.crt.orig sudo cp /opt/lampp/etc/ssl.key/server.key /opt/lampp/etc/ssl.key/server.key.orig sudo cp CA/certs/server.crt /opt/lampp/etc/ssl.crt/server.crt sudo cp CA/private/server.key /opt/lampp/etc/ssl.key/server.key 3. Zmodyfikować plik httpd.conf na serwerze Apache tak, aby ten domyślnie rozpoczynał transmisję https://. Listing 18: Krok 3 DocumentRoot "/opt/lampp/htdocs" <Directory "/opt/lampp/htdocs"> SSLRequireSSL... 4. Zrestartować serwer Apache. 5 / 9
2.6. Skonfigurowanie klienta (Firefox) do używania certyfikatu klienta 1. Należy dodać własne CA do listy zaufanych w programie Firefox. W tym celu trzeba wejść w preferencje programu Firefox, a następnie wybrać zakładkę Advanced > Encryption i nacisnąć przycisk View certificates. Rysunek 1: Krok 1a Wyświetli się okno z organami certyfikacji. Należy dodać własne CA jako kolejny organ. Rysunek 2: Krok 1b 6 / 9
Aby wykonać operację dodawania organu certyfikującego należy: kliknąć przycisk Import..., a następnie wybrać z dysku plik certyfikatu CA. W momencie gdy zostanie wpisane hasło (bus12) certyfikat powinien zostać właściwie zaimportowany (rysunek 3) i pojawi się na liście organów (rysunek 2). Rysunek 3: Krok 1b 2. Dodać certyfikat klienta do programu Firefox. W tym celu należy pozostać w oknie managera certyfikatów, zmienić zakładkę na Your certificates,a następnie kliknąć przycisk Import... i wybrać certyfikat klienta z dysku (rysunek 4). Poprawnie dodany certyfikat pojawi się na liście. Rysunek 4: Krok 2 2.7 Dalsza konfiguracja serwera Apache 1. Aby udostępnić konkretne katalogi użytkownikom z certyfikatami klienckimi należy je najpierw utworzyć (na przykład dla-marka, dla-wszystkich) i umieścić w katalogu www: Listing 19: Krok 1 sudo mkdir /opt/lampp/htdocs/dla-marka sudo mkdir /opt/lampp/htdocs/dla-wszystkich 7 / 9
2. Zmodyfikować plik httpd.conf wpisując do niego treść z listingu 21. Reguły definiują uprawnienia konkretnych katalogów i wymagają w nich autoryzacji klienta. Listing 20: Krok 2 sudo gedit /opt/lampp/etc/httpd.conf Listing 21: Krok 3 SSLVerifyClient none SSLCACertificateFile /opt/lampp/etc/ssl.crt/ca.crt <Location /dla-marka> SSLVerifyClient require SSLVerifyDepth 1 </Location> <Location /dla-sylwii> SSLVerifyClient require SSLVerifyDepth 1 </Location>... 3. Wyniki Zastosowana konfiguracja (w środowisku XAMPP 1.8.1 i Firefox) umożliwia skuteczne łączenie z serwerem localhost za pośrednictwem transmisji https:// (rysunek 5). Rysunek 5: Informacje o certyfikacje serwera 8 / 9
Gdy użytkownik odwiedza katalog z ograniczeniami dostępu (np. dla-marka) zostaje poproszony o certyfikat klienta (rysunek 6). Rysunek 6: Żądanie identyfikacji klienta Certyfikat zostaje zaakceptowany, a zawartość strony wyświetlona (rysunek 7). Rysunek 7: Fragment zabezpieczonej strony 9 / 9