OpenSSL

Transkrypt

OpenSSL
Ł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
serial
crlnumber
= $dir/certs/ca.crt
= $dir/serial
= $dir/crlnumber
crl
private_key
RANDFILE
= $dir/crl.pem
= $dir/private/ca.key
= $dir/private/.rand
# The CA certificate
# The current serial number
# the current crl number
# must be commented out to leave a V1 CRL
# The current CRL
# The private key
# 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

Podobne dokumenty