Wydawnictwo Helion
ul. Koœciuszki 1c
44-100 Gliwice
tel. 032 230 98 63
Sieci VPN. Zdalna praca
i bezpieczeñstwo danych
Autor: Marek Serafin
ISBN: 978-83-246-1521-6
Format: B5, stron: 160
Poznaj i wykorzystaj w praktyce metody korzystania z sieci VPN
•
Na czym opiera siê standard SSL?
•
Jak zestawiaæ tunele VPN w systemach Windows i Linux?
•
Jak po³¹czyæ oddzia³y firm za pomoc¹ tunelu IPSec?
Serwery plików i baz danych spotykamy niemal w ka¿dej firmie. Architektura
klient-serwer umo¿liwia dostêp do aplikacji nie tylko wewn¹trz firmy, ale tak¿e
z dowolnego innego miejsca. Rozwój sieci pozwoli³ wielu organizacjom na sprawn¹
komunikacjê i otworzy³ perspektywy dla tych pracowników, którzy z ró¿nych wzglêdów
wykonuj¹ swoje obowi¹zki poza biurem. Niestety – zdalny dostêp do firmowej
infrastruktury IT niesie ze sob¹ tak¿e zagro¿enia zwi¹zane z mo¿liwoœci¹ utraty,
uszkodzenia lub wydostania siê na zewn¹trz cennych danych. Rozwi¹zaniem tego
problemu s¹ ³¹cza szyfrowane, nazywane VPN.
Ksi¹¿ka
„
Sieci VPN. Zdalna praca i bezpieczeñstwo danych
”
to praktyczny przewodnik
dla administratorów sieci firmowych, którzy zajmuj¹ siê wdra¿aniem rozwi¹zañ
umo¿liwiaj¹cych pracê na odleg³oœæ. Opisuje wszystkie aspekty konfigurowania tuneli
VPN z wykorzystaniem protoko³ów SSL (OpenVPN) i IPSec (OpenSWAN) w systemach
Linux i Windows. Czytaj¹c j¹, poznasz standard SSL, zasady generowania certyfikatów
oraz metody implementacji sieci VPN. Analizuj¹c zawarte w ksi¹¿ce przyk³ady,
nauczysz siê otwieraæ zdalny dostêp do sieci korporacyjnej, ³¹czyæ oddzia³y firmy
za pomoc¹ IPSec i uruchamiaæ tunele VPN w urz¹dzeniach mobilnych.
•
Zagro¿enia wynikaj¹ce z konstrukcji protoko³u TCP/IP
•
Przesy³anie danych z wykorzystaniem SSL
•
Zapewnianie pracownikom zdalnego dostêpu do zasobów firmy
•
Generowanie kluczy
•
Tworzenie tuneli SSH
•
Instalacja i konfiguracja programu OpenVPN
•
Tunele VPN w urz¹dzeniach mobilnych
•
Implementacja IPSEC/L2TP w systemie Linux
•
Konfiguracja VPN w systemie Windows
Zabezpiecz dostêp do swojej sieci.
Skorzystaj z wiedzy doœwiadczonego administratora
Spis tre
Ĉci
Przedmowa ...................................................................................... 7
Rozdzia
ä 1. Wstöp .............................................................................................. 9
Rozdzia
ä 2. SäaboĈè protokoäów sieciowych i zwiñzane z tym problemy .............. 11
Rozdzia
ä 3. SSL jako standard bezpiecznego przesyäania danych ........................ 13
3.1. Historia i znaczenie protoko
áu SSL ......................................................................... 13
3.1.1. Przebieg nawi
ązania poáączenia SSL .......................................................... 14
3.1.2. Znaczenie zaufanego certyfikatu ................................................................ 15
3.2. Generowanie certyfikatów przy u
Īyciu programu OpenSSL .................................. 16
3.2.1. Tworzenie w
áasnego CA ............................................................................. 16
3.2.2. Tworzenie klucza prywatnego dla serwera ................................................. 18
3.2.3. Generowanie wniosku o wystawienie certyfikatu ....................................... 18
3.2.4. Wystawianie certyfikatu dla serwera .......................................................... 19
3.2.5.
ĝciąganie hasáa z klucza prywatnego serwera ............................................ 20
3.2.6. Uniewa
Īnianie certyfikatów ....................................................................... 20
3.2.7. Generowanie listy CRL (uniewa
Īnionych certyfikatów) ............................ 21
3.2.8. Ró
Īne formaty certyfikatów ....................................................................... 21
3.3. Kompilacja biblioteki openssl ze
Ĩródeá .................................................................. 22
Rozdzia
ä 4. Tunelowanie portów ....................................................................... 25
4.1. Program Stunnel ...................................................................................................... 26
4.1.1. stunnel.conf ................................................................................................ 29
4.1.2. Przyk
áad 1 ................................................................................................... 31
4.1.3. Przyk
áad 2 ................................................................................................... 33
4.2. Tunele SSH ............................................................................................................. 35
4.2.1. Przyk
áad 1 ................................................................................................... 35
4.2.2. Przyk
áad 2 — SSH jako Socks Proxy ......................................................... 37
4.2.3. Przyk
áad 3 — tunele z przekazywaniem zdalnym ...................................... 37
4.2.4. Przyk
áad 4 — tunel UDP po SSH ............................................................... 41
Rozdzia
ä 5. OpenVPN — praktyczna implementacja tuneli VPN .......................... 45
5.1. Instalacja ................................................................................................................. 45
5.1.1. Instalacja w systemie Linux Debian ........................................................... 46
5.1.2. Instalacja przez kompilacj
Ċ Ĩródeá programu (Linux) ................................ 46
5.1.3. Instalacja pod systemami MS Windows ..................................................... 50
5.2. Konfiguracja OpenVPN .......................................................................................... 52
4
Sieci VPN. Zdalna praca i bezpiecze
þstwo danych
5.3. Praktyczny przyk
áad — zdalny dostĊp do zasobów firmy dla pracowników .......... 53
5.3.1. Generowanie certyfikatów SSL .................................................................. 54
5.3.2. Konfiguracja po stronie serwera ................................................................. 55
5.3.3. Uruchomienie us
áugi serwera OpenVPN .................................................... 57
5.3.4. Konfiguracja klienta ................................................................................... 58
5.4. Bardziej z
áoĪona konfiguracja z wieloma uĪytkownikami ...................................... 59
5.4.1. Przypisywanie sta
áych adresów IP uĪytkownikom ..................................... 62
5.4.2. Pliki ustawie
Ĕ uĪytkowników w katalogu ccd ............................................ 62
5.4.3. Tworzenie pliku dostep.txt ......................................................................... 63
5.4.4. Testowanie .................................................................................................. 64
5.4.5. Logowanie zdarze
Ĕ do pliku ....................................................................... 65
5.5. Uniewa
Īnianie certyfikatów .................................................................................... 67
5.6.
àączenie oddziaáów firmy ....................................................................................... 68
5.6.1. Przyk
áad rozwiązania z routerem ................................................................ 69
5.6.2. Tunel VPN z mostkowaniem ...................................................................... 73
5.6.3. Tunel VPN z mostkowaniem w Windows XP ............................................ 78
5.7. OpenVPN w Windows Server z uwierzytelnianiem przez Active Directory .......... 80
5.7.1. Konfiguracja serwera .................................................................................. 81
5.7.2. Konfiguracja klienta ................................................................................... 83
5.8. OpenVPN w systemach Windows Mobile (PDA) ................................................... 84
5.8.1. Instalacja ..................................................................................................... 85
Rozdzia
ä 6. IPSec ............................................................................................. 89
6.1. IPSec a translacja adresów (maskarada) .................................................................. 92
6.2. IPSec — przygotowanie
Ğrodowiska w systemie Linux .......................................... 93
6.2.1. Instalacja programu OpenSWAN .................................................................. 94
6.3. Praktyczny przyk
áad — brama IPSec/VPN dla uĪytkowników mobilnych ............. 95
6.3.1. Konfiguracja bramy IPSec (Linux) ............................................................. 96
6.4. Konfiguracja klienta Windows .............................................................................. 101
6.5. Debugowanie po
áączenia ...................................................................................... 104
6.6. Konfiguracja z uwierzytelnieniem przez certyfikaty ............................................. 106
6.6.1. Konfiguracja OpenSWAN z wykorzystaniem certyfikatów ..................... 106
6.7. Import certyfikatów w systemie Windows ............................................................ 108
6.7.1. Konfiguracja po
áączenia ........................................................................... 112
6.8. Dost
Ċp z urządzeĔ PDA — Windows Mobile 2003, 2005, 2006 ............................. 116
6.8.1. Konfiguracja Windows Mobile z kluczem wspó
ádzielonym (PSK) ......... 116
6.8.2. Konfiguracja Windows Mobile z certyfikatami ........................................ 117
6.9.
àączenie oddziaáów firmy tunelem IPSec ............................................................. 119
Rozdzia
ä 7. Windows Server 2003 jako brama VPN/IPSec ............................... 125
7.1. Konfiguracja us
áugi Routing i dostĊp zdalny ........................................................ 126
7.2. Konfiguracja klienta .............................................................................................. 132
7.3. Dost
Ċp do VPN na podstawie czáonkostwa w grupie ............................................ 133
Rozdzia
ä 8. ãñczenie oddziaäów
firmy z wykorzystaniem systemów Windows Server 2003 .............. 139
8.1. Konfiguracja lokalizacji 1 — Gliwice ................................................................... 140
8.2. Konfiguracja lokalizacji 2 — Bytom .................................................................... 145
8.3. Konfiguracja zabezpiecze
Ĕ IPSec ......................................................................... 145
8.4. Debugowanie po
áączenia ...................................................................................... 147
Rozdzia
ä 9. Podsumowanie ............................................................................. 149
Skorowidz .................................................................................... 153
Rozdzia
ä 3.
SSL jako standard
bezpiecznego
przesy
äania danych
3.1. Historia i znaczenie protoko
äu SSL
W odpowiedzi na problemy zwi
ązane z brakiem zabezpieczeĔ w popularnych protoko-
áach internetowych firma Netscape Communications Corporation w latach 90. ubie-
g
áego wieku opracowaáa protokóá SSL. Obecnie najpopularniejsza jest wersja trzecia
protoko
áu — SSL 3, poniewaĪ wczeĞniejsze implementacje zawieraáy kilka báĊdów.
W 1996 roku za spraw
ą IETF (ang. Internet Engineering Task Force) powstaáa grupa
robocza TLS (ang. Transport Layer Security), która ma za zadanie rozwija
ü oraz pu-
blikowa
ü standard SSL.
W za
áoĪeniach SSL powstaá jako zabezpieczenie do protokoáu http dla potrzeb usáug
e-commerce. Jednak dzi
Ċki jego uniwersalnoĞci moĪna wykorzystaü go do zabezpie-
czenia wi
ĊkszoĞci usáug TCP, a nawet do tworzenia sieci VPN, co zostanie przedsta-
wione w niniejszej ksi
ąĪce.
Protokó
á SSL zapewnia nastĊpujące podstawowe funkcje bezpieczeĔstwa:
uwierzytelnianie stron — czyli potwierdzenie ich autentyczno
Ğci na podstawie
certyfikatów,
poufno
Ğü i integralnoĞü przesyáu — tzn. ochronĊ przed podsáuchaniem
i modyfikacj
ą.
Proces uwierzytelniania przebiega przy u
Īyciu asymetrycznych algorytmów kryp-
tograficznych. W zwi
ązku z powyĪszym kaĪda ze stron musi posiadaü swój wáasny
klucz prywatny (tajny) oraz klucz publiczny (certyfikat).
14
Sieci VPN. Zdalna praca i bezpiecze
þstwo danych
Po pozytywnym uwierzytelnieniu stron nast
Ċpuje wymiana danych przy uĪyciu któregoĞ
z ustalonych, symetrycznych algorytmów kryptograficznych (s
ą znacznie szybsze).
Aby mo
Īliwe byáo potwierdzenie autentycznoĞci strony biorącej udziaá w komunika-
cji, np. serwera, musi ona wylegitymowa
ü siĊ certyfikatem podpisanym przez zaufane
centrum certyfikacji (ang. CA — Certificate Authority).
CA to zaufana instytucja, która zajmuje si
Ċ wystawianiem certyfikatów. Do jej obo-
wi
ązków naleĪy sprawdzenie prawnych podstaw wnioskowania podmiotu o certyfikat.
Chodzi tu g
áównie o prawo do nazwy firmy, nazwy domeny itd.
Na certyfikat sk
áadają siĊ pola zawierające nazwĊ wáaĞciciela, nazwĊ podmiotu, okres
wa
ĪnoĞci, a takĪe certyfikat gáównego i ewentualnie poĞrednich centrów certyfikacji
— ca
áoĞü stanowi tzw. ĞcieĪkĊ certyfikacji.
3.1.1. Przebieg nawi
ñzania poäñczenia SSL
Zanim protoko
áy warstwy aplikacji bĊdą mogáy wymieniaü dane w bezpieczny sposób,
musi nast
ąpiü nawiązanie sesji SSL (ang. SSL handshake). Na SSL handshake skáada
si
Ċ kilka faz negocjacji, które przedstawiono kolejno w punktach.
1.
Klient
áączy siĊ z serwerem i wysyáa pakiet początkowy Hello, a wraz z nim
numer obs
áugiwanej wersji SSL, obsáugiwane algorytmy szyfrujące, algorytmy
kompresji oraz losowy numer zwi
ązany z rozpoczĊtą sesją (ID).
2.
Serwer w odpowiedzi wysy
áa klientowi numer obsáugiwanej wersji SSL,
obs
áugiwane algorytmy szyfrujące, a takĪe swój certyfikat (klucz publiczny).
3.
Na tym etapie klient sprawdza certyfikat serwera — czy jest wa
Īny oraz czy
wystawi
á go zaufany urząd (CA). Protokóá SSL przewiduje takĪe moĪliwoĞü
wys
áania przez serwer Īądania o uwierzytelnienie klienta. Uwierzytelnianie
to jest opcjonalne i stosuje si
Ċ je w okreĞlonych warunkach.
4.
W przypadku pozytywnego uwierzytelnienia serwera klient generuje
48-bajtow
ą liczbĊ zwaną „pre-master secret” i szyfruje ją, uĪywając przy
tym klucza publicznego serwera (zawartego w certyfikacie serwera). Liczba
„pre-master” sk
áada siĊ z 2 bajtów identyfikujących klienta oraz 46 bajtów
losowych.
5.
Serwer po otrzymaniu liczby „pre-master” odszyfrowuje j
ą, uĪywając do tego
swojego klucza prywatnego, i porównuje pierwsze 2 bajty identyfikuj
ące klienta
z danymi, które otrzyma
á w inicjacyjnym pakiecie Hello.
6.
Je
Ğli jest wymagane uwierzytelnienie klienta, jest to robione w tej chwili.
Wówczas klient musi przes
áaü swój certyfikat.
7.
Na podstawie ju
Ī wymienionych danych (m.in. pre-master key, losowe dane
wygenerowane w punkcie 1.) serwer i klient generuj
ą tzw. master key (znany
tylko im).
Rozdzia
ä 3.
i SSL jako standard bezpiecznego przesyäania danych
15
8.
Zarówno klient, jak i serwer na podstawie master-key generuj
ą symetryczne
klucze sesyjne, które umo
Īliwiają im szyfrowanie i sprawdzanie integralnoĞci
przesy
áanych danych
1
.
9.
Ko
Ĕcząc handshake, klient przesyáa do serwera wiadomoĞü zaszyfrowaną
ustalonym kluczem sesyjnym. Wiadomo
Ğü ta, nazywana koĔcowym
uzgodnieniem (ang. finished handshake), jest jako pierwsza szyfrowana
tajnym kluczem.
10.
Serwer odpowiada tak
Īe wiadomoĞcią zaszyfrowaną za pomocą wspólnego
klucza. Od tej pory sesja SSL jest nawi
ązana.
3.1.2. Znaczenie zaufanego certyfikatu
Co w praktyce oznacza,
Īe dany certyfikat jest zaufany?
Oznacza to tylko (a
Ī) tyle, Īe zostaá wystawiony przez wiarygodne (zaufane) Centrum
Certyfikacji CA. Wszystkie popularne przegl
ądarki internetowe, programy pocztowe
i inne aplikacje korzystaj
ące z protokoáu SSL mają „zaszytą” w sobie na staáe listĊ
zaufanych wystawców CA (ich certyfikaty). Dzi
Ċki temu podczas nawiązywania poáą-
czenia SSL aplikacja nie zg
áasza báĊdu, rozpoznając, Īe certyfikat zostaá wystawiony
przez który
Ğ z zaufanych CA.
Certyfikaty wystawione przez zaufane CA maj
ą znaczenie gáównie dla publicznych
serwerów WWW, gdzie rozproszeni po ca
áym Ğwiecie klienci muszą mieü pewnoĞü,
Īe serwer, z którym siĊ áączą, jest na pewno tym, za jaki siĊ podaje (np. sklep inter-
netowy).
W przypadku tworzenia po
áączeĔ VPN nic nie stoi na przeszkodzie, abyĞ stworzyá swoje
CA i sam wystawia
á certyfikaty na wáasne potrzeby. MoĪesz przecieĪ ufaü certyfika-
tom, które sam wygenerowa
áeĞ, i instalowaü je na laptopach pracowników.
W przeciwie
Ĕstwie do serwera WWW i przeglądarek internetowych w zastosowa-
niach VPN-owych cz
Ċsto waĪne jest uwierzytelnienie klienta przez serwer (bramĊ VPN).
Nie chcemy przecie
Ī, aby do sieci korporacyjnej mógá podáączyü siĊ ktokolwiek
na
Ğwiecie posiadający klienta VPN, a jedynie osoby posiadające odpowiednie certy-
fikaty.
Kolejny punkt tego rozdzia
áu zawiera opis programu OpenSSL wraz z przykáadami
tworzenia kluczy, wniosków i certyfikatów.
1
Na podstawie master-key generowanych jest sze
Ğü kluczy — trzy w kierunku serwer-klient i trzy
w drug
ą stronĊ. Klucze te sáuĪą do szyfrowania i sprawdzania integralnoĞci danych. Zainteresowanych
Czytelników odsy
áam do dokumentacji dostĊpnej na stronie korporacji Netscape: http://wp.netscape.com/
eng/ssl3/draft302.txt.
16
Sieci VPN. Zdalna praca i bezpiecze
þstwo danych
3.2. Generowanie certyfikatów
przy u
Ĕyciu programu OpenSSL
Wi
ĊkszoĞü programów opisanych w tej ksiąĪce do uwierzytelniania stron wykorzystuje
protokó
á SSL. Informacje zawarte w tym rozdziale, a w szczególnoĞci przykáady ge-
nerowania kluczy i certyfikatów X.509, wykorzystywane b
Ċdą czĊsto w dalszej czĊĞci
ksi
ąĪki. Aby uniknąü wielokrotnego opisywania tych samych czynnoĞci w nastĊpnych
rozdzia
áach, bĊdĊ odsyáaá Czytelnika do instrukcji zawartych w niniejszym punkcie.
Do stworzenia w
áasnego CA, generowania kluczy, wniosków i certyfikatów bĊdziemy
u
Īywali najpopularniejszej w Ğwiecie „open source” biblioteki openssl. Biblioteka ta
zawiera implementacj
Ċ protokoáów SSL i TLS oraz wiĊkszoĞü uĪywanych algorytmów
kryptograficznych. Korzysta z niej szereg znanych aplikacji wykorzystuj
ących algo-
rytmy szyfruj
ące, jak np. OpenSSH, OpenVPN, ApacheSSL itp.
Biblioteka openssl dostarczana jest standardowo wraz z popularnymi dystrybucjami
Linuksa. Najprawdopodobniej bibliotek
Ċ tĊ masz zainstalowaną w systemie. Aby siĊ
o tym przekona
ü, wpisz po prostu polecenie
openssl
. Powinien zg
áosiü siĊ znak za-
ch
Ċty programu:
OpenSSL>
. W przeciwnym razie musisz j
ą zainstalowaü w sposób ty-
powy dla swojej dystrybucji. Ostatecznie mo
Īesz pobraü Ĩródáa najnowszej wersji ze
strony http://openssl.org i w
áasnorĊcznie skompilowaü program.
Wersja instalacyjna pod systemy Windows dost
Ċpna jest na stronie http://www.slproweb.
com/products.html.
Zanim przejdziemy do generowania certyfikatów dla serwerów i klientów, musimy stwo-
rzy
ü wáasny Urząd Certyfikacji (CA). Na początku dwie uwagi ogólne.
Wa
Īne jest, abyĞ swoje CA utworzyá na jakimĞ bezpiecznym komputerze odáączonym
od internetu albo przynajmniej za firewallem, tak aby nie by
á on bezpoĞrednio „wi-
doczny” w internecie.
Wa
Īne jest takĪe regularne robienie kopii bezpieczeĔstwa wystawionych certyfikatów
oraz ca
áego katalogu „ssl”, tak aby w razie potrzeby moĪna byáo uniewaĪniü któryĞ
z certyfikatów.
Zak
áadam, Īe masz zainstalowany pakiet OpenSSL. JeĪeli nie, to musisz go zainsta-
lowa
ü, uĪywając menedĪera pakietów swojej dystrybucji, lub skompilowaü program
samodzielnie.
3.2.1. Tworzenie w
äasnego CA
W pierwszej kolejno
Ğci odnajdujemy plik openssl.cnf. Prawdopodobne lokalizacje tego
pliku to:
/etc/ssl/openssl.cnf — dla programu instalowanego z paczek (np. Debian),
/usr/local/etc/openssl.cnf — w przypadku wersji kompilowanej r
Ċcznie,
Rozdzia
ä 3.
i SSL jako standard bezpiecznego przesyäania danych
17
C:\OpenSSL\bin — dla systemów Win32.
W pliku tym odnajdujemy sekcj
Ċ
[ CA_default ]
. Zmie
Ĕ wpisy u siebie tak, aby wy-
gl
ądaáy jak te z listingu 3.2.1.1.
Listing 3.2.1.1. Wycinek pliku openssl.cnf
[ CA_default ]
dir = /etc/ssl # g
áówny katalog, w którym zapisywane są pliki
certs = /etc/ssl/certs # katalog, w którym zapisywane s
ą certyfikaty
crl_dir = $dir/crl # katalog z list
ą certyfikatów uniewaĪnionych (CRL)
private_key = $dir/private/cakey.pem # klucz prywatny CA
database = $dir/index.txt # baza, w której przechowywane s
ą informacje
´ o wystawionych certyfikatach wraz ze statusem
certificate = $dir/cacert.pem # Certyfikat CA — do podpisu wniosków
serial = $dir/serial # plik pomocniczy z bie
Īącym numerem — inkrementowany
# po ka
Īdym wystawieniu certyfikatu
crl = $dir/crl.pem # bie
Īąca lista certyfikatów uniewaĪnionych
Upewniamy si
Ċ, czy istnieje katalog podany w zmiennej
dir
, czyli /etc/ssl, oraz wszystkie
jego podkatalogi. Je
Īeli nie, musimy je zaáoĪyü. Dla katalogu ssl/private ustaw upraw-
nienia tak, aby tylko u
Īytkownik root mógá do niego wejĞü.
Stwórz pliki /etc/ssl/index.txt oraz /etc/ssl/serial, u
Īywając komend podanych poniĪej.
root@ca:~# touch /etc/ssl/index.txt #(ma by
ü pusty)
root@ca:~# echo 00 > /etc/ssl/serial #(ma zawiera
ü wpis 00)
Przyst
Ċpujemy do generowania klucza prywatnego centrum certyfikacji CA. Jest to
czynno
Ğü jednorazowa, tzn. po wygenerowaniu klucza prywatnego CA, a nastĊpnie
odpowiadaj
ącego mu certyfikatu bĊdziesz uĪywaá ich do podpisywania innych certy-
fikatów. Pami
Ċtaj, aby zarchiwizowaü pliki z katalogu /etc/ssl w bezpiecznym miejscu.
B
Ċdąc w katalogu /etc/ssl, wydajemy nastĊpujące polecenie:
root@ca:/etc/ssl# openssl genrsa -des3 -out private/cakey.pem 1024
Generating RSA private key, 1024 bit long modulus
........++++++
...++++++
e is 65537 (0x10001)
Enter pass phrase for private/cakey.pem: <podaj hasđo klucza prywatnego CA>
Po potwierdzeniu has
áa do klucza prywatnego CA klucz zostanie zapisany w pliku
private/cakey.pem. Nie zapomnij has
áa do tego klucza, bĊdzie Ci nieraz potrzebne.
Kolejn
ą czynnoĞcią jest wygenerowanie certyfikatu CA. W tym celu wpisujemy na-
st
Ċpujące polecenie:
root@ca:/etc/ssl# openssl req -new -x509 -days 365 -key private/cakey.pem -out
´
cacert.pem
Zostaniemy poproszeni o podanie kilku pól zawartych w certyfikacie.
Country Name (2 letter code) [AU]:PL
State or Province Name (full name) [Some-State]:Slask
18
Sieci VPN. Zdalna praca i bezpiecze
þstwo danych
Locality Name (eg, city) []:Gliwice
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Moja Firma Sp. z o.o.
Organizational Unit Name (eg, section) []:
Common Name (eg, YOUR name) []: ca.firma.pl
Email Address []:
Znaczenie powy
Īszych pól jest raczej jasne, zwracam jedynie uwagĊ na pole
Common
Name
, które powinno zawiera
ü nazwĊ podmiotu — np. nazwĊ uĪytkownika lub jed-
nostki. W tym przypadku, gdy generujesz certyfikat dla CA, wpisz tutaj nazw
Ċ swojej
organizacji s
áownie (np. Firma SA) albo podaj np. nazwĊ domeny.
Po podaniu has
áa do klucza prywatnego certyfikat zostanie zapisany w pliku cacert.pem.
W powy
Īszym przykáadzie czas waĪnoĞci certyfikatu wynosiü bĊdzie 1 rok. MoĪna
go oczywi
Ğcie wydáuĪyü.
Na tym zako
ĔczyliĞmy tworzenie wáasnego urzĊdu CA. Mając pliki cakey.pem i cacert.
pem, czyli klucz prywatny i publiczny CA, mo
Īemy juĪ wystawiaü certyfikaty innym
podmiotom.
3.2.2. Tworzenie klucza prywatnego dla serwera
Celem stworzenia klucza prywatnego dla serwera wpisujemy nast
Ċpujące polecenie:
root@ca:/etc/ssl# openssl genrsa -des3 -out private/serverkey.pem 1024
Program OpenSSL zapyta o has
áo — bĊdzie to hasáo klucza prywatnego serwera. Klucz
prywatny zapisany zostanie w pliku private/serverkey.pem.
Nast
Ċpną czynnoĞcią jest wygenerowanie wniosku o wystawienie certyfikatu.
3.2.3. Generowanie wniosku
o wystawienie certyfikatu
root@ca:/etc/ssl# openssl req -new -key private/serverkey.pem -out serverreq.pem
B
Ċdziesz musiaá podaü hasáo klucza prywatnego serwera (to, które podawaáeĞ przed
chwil
ą). JeĪeli hasáo bĊdzie poprawne, zostaniesz zapytany o dane do wniosku, zgod-
nie z listingiem poni
Īej.
Country Name (2 letter code) [AU]:PL
State or Province Name (full name) [Some-State]:Slask
Locality Name (eg, city) []:Gliwice
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Moja Firma Sp. z o.o.
Organizational Unit Name (eg, section) []:
Common Name (eg, YOUR name) []: server.firma.pl
Email Address []:
Zwracam tutaj uwag
Ċ na pole
Common Name
. W przypadku certyfikatów dla serwerów
pole to powinno zawiera
ü peáną nazwĊ domenową, pod jaką serwer dziaáa w internecie
Rozdzia
ä 3.
i SSL jako standard bezpiecznego przesyäania danych
19
(tzw. FQDN). Jest to wa
Īne, poniewaĪ jeĞli pole
Common Name
nie pokrywa si
Ċ z nawą
domenow
ą, niektóre programy zgáaszają niezgodnoĞü certyfikatu z adresem serwera
(zw
áaszcza przeglądarki i klienty poczty).
Wniosek zostanie zapisany w pliku serverreq.pem. Kolejnym krokiem b
Ċdzie podpi-
sanie go przez nasze CA, czyli wystawienie mu certyfikatu.
3.2.4. Wystawianie certyfikatu dla serwera
Celem wystawienia certyfikatu dla podmiotu (serwera) musisz podpisa
ü jego wniosek.
Aby to uczyni
ü, wpisz poniĪsze polecenie.
root@ca:/etc/ssl# openssl ca -notext -in serverreq.pem -out servercert.pem
Zostaniesz zapytany o has
áo do klucza prywatnego CA cakey.pem (nie myl z hasáem
do klucza prywatnego serwera!).
Nast
Ċpnie OpenSSL pokaĪe szczegóáy certyfikatu i zapyta, czy chcesz go podpisaü.
Operacja podpisu wygl
ąda tak, jak pokazano na listingu 3.2.4.1.
Listing 3.2.4.1. Komunikaty pojawiaj
ące siĊ podczas wystawiania certyfikatu
Signature ok
Certificate Details:
Serial Number: 5 (0x5)
Validity
Not Before: Sep 17 12:59:06 2007 GMT
Not After : Sep 16 12:59:06 2008 GMT
Subject:
countryName = PL
stateOrProvinceName = Slask
organizationName = Moja Firma Sp. z o.o.
organizationalUnitName =
commonName = server.firma.pl
X509v3 extensions:
X509v3 Basic Constraints:
CA:FALSE
Netscape Comment:
OpenSSL Generated Certificate
X509v3 Subject Key Identifier:
0E:CE:3E:06:C4:46:53:78:B0:05:AB:18:9B:BA:90:79:9B:A1:A5:C8
X509v3 Authority Key Identifier:
keyid:FC:B8:73:29:C6:E4:50:B2:3E:CE:0A:78:8C:62:90:A5:62:3C:87:1B
DirName:/C=PL/ST=Slask/L=Gliwice/O=Moja Firma Sp. z o.o./
CN=ca.firma.pl/emailAddress=admin@firma.pl
serial:97:1B:4E:CE:0B:5F:CE:E2
Certificate is to be certified until Sep 16 12:59:06 2008 GMT (365 days)
Sign the certificate? [y/n]: y
1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Data Base Updated
20
Sieci VPN. Zdalna praca i bezpiecze
þstwo danych
Mo
Īesz teraz podejrzeü zawartoĞü plików index.txt oraz serial, które zostaáy zaktuali-
zowane po podpisaniu wniosku. Uwa
Īaj na plik index.txt, jest on potrzebny przy od-
wo
áywaniu certyfikatu (generowaniu CRL).
Mamy ju
Ī parĊ kluczy dla serwera. Przy zestawianiu sieci VPN bĊdą potrzebne teĪ
klucze i certyfikaty dla u
Īytkowników. Generujemy je w sposób analogiczny jak dla
serwera, zgodnie z punktami 3.2.2 – 3.2.4. Zwró
ü uwagĊ, aby w polu
Common Name
podawa
ü dane jednoznacznie identyfikujące uĪytkownika — np. jego login korpora-
cyjny. Niektóre programy po
Common Name
identyfikuj
ą uĪytkowników.
Jeszcze jeden szczegó
á dotyczący hasáa zabezpieczającego klucz prywatny. W mo-
mencie uruchamiania aplikacji korzystaj
ącej z tego klucza bĊdziemy zmuszeni wpi-
sywa
ü hasáo z klawiatury. W praktyce na serwerach aplikacja czĊsto dziaáa jako usáuga
uruchamiana w trakcie startu systemu i oczekiwanie na wpisanie has
áa jest niezado-
walaj
ącym rozwiązaniem. W takich sytuacjach moĪemy Ğciągnąü hasáo z klucza pry-
watnego. Nale
Īy jednak pamiĊtaü, aby dostĊp do klucza miaá jedynie administrator
serwera (root). Komenda przedstawiona w punkcie 3.2.5 umo
Īliwia ĞciągniĊcie hasáa
z klucza prywatnego.
3.2.5.
ćciñganie hasäa z klucza prywatnego serwera
# openssl rsa -in private/serverkey.pem -out private/serverkey.pem_bezhasla
Nie zalecam natomiast
Ğciągania haseá z kluczy prywatnych uĪytkowników zdalnych.
Jest to dodatkowe zabezpieczenie. W razie kradzie
Īy laptopa dostĊp do VPN nie bĊ-
dzie mo
Īliwy bez znajomoĞci hasáa.
3.2.6. Uniewa
Ĕnianie certyfikatów
Pr
Ċdzej czy póĨniej zajdzie potrzeba uniewaĪnienia któregoĞ z certyfikatów. Klasycznym
przyk
áadem jest odejĞcie pracownika lub kradzieĪ laptopa. Do uniewaĪnienia certyfi-
katu s
áuĪy parametr
revoke
programu OpenSSL. Przyk
áadowo aby przystąpiü do unie-
wa
Īnienia certyfikatu osobie Jan Kowalski (jkowalskicert.pem), wpisz polecenie:
root@srv:/etc/ssl# openssl ca -revoke jkowalskicert.pem
OpenSSL zapyta o has
áo klucza CA i po podaniu prawidáowego uniewaĪni certyfikat:
Using configuration from /usr/lib/ssl/openssl.cnf
Enter pass phrase for /etc/ssl/private/cakey.pem:
DEBUG[load_index]: unique_subject = "yes"
Revoking Certificate 04.
Data Base Updated
Musimy jeszcze wygenerowa
ü listĊ CRL, w której zapisane są uniewaĪnione certyfi-
katy. Robimy to zgodnie z punktem 3.2.7.
Rozdzia
ä 3.
i SSL jako standard bezpiecznego przesyäania danych
21
3.2.7. Generowanie listy CRL
(uniewa
Ĕnionych certyfikatów)
root@ca:/etc/ssl# openssl ca -gencrl -out crl.pem
Plik crl.pem nale
Īy przegraü póĨniej na wáaĞciwy serwer i wskazaü w aplikacji korzy-
staj
ącej z certyfikatów (szczegóáy w dalszej czĊĞci ksiąĪki).
3.2.8. Ró
Ĕne formaty certyfikatów
Nale
Īy wspomnieü jeszcze o róĪnych formatach plików, w których zapisywane są
klucze i certyfikaty. Niestety, nie ma tu jednego standardu i ró
Īni producenci prefe-
ruj
ą róĪne formaty. Niemniej za pomocą programu OpenSSL moĪesz je konwertowaü
z jednego formatu na inny. Klucze prywatne najcz
ĊĞciej zapisywane są w formie PEM
lub DER (binarny). Dla certyfikatów u
Īywane są formaty PEM, DER oraz PKCS12.
Aplikacje bazuj
ące na bibliotece openssl, czyli wszystkie uniksowe, uĪywają na ogóá
formatu PEM.
Formaty DER i PKCS12 rozpowszechnione s
ą w systemach Microsoftu. Format PKCS12
przechowuje w jednym pliku klucz prywatny zabezpieczony has
áem i odpowiadający
mu certyfikat. Poprzednikiem PKCS12 by
á przestarzaáy obecnie format PFX; jakkol-
wiek firma Microsoft u
Īywa rozszerzeĔ plików PFX dla formatu PKCS12.
Aby przekonwertowa
ü certyfikat z jednej postaci na drugą, musisz przekazaü progra-
mowi OpenSSL odpowiednie parametry. W tabeli 3.2.8.1 przedstawiono sk
áadniĊ pro-
gramu dla kilku popularnych przekszta
áceĔ.
Tabela 3.2.8.1. Sk
áadnia programu OpenSSL potrzebna do konwersji certyfikatów
Format wej
Ĉciowy
Format wyj
Ĉciowy
Sk
äadnia OpenSSL
PEM
DER
openssl x509 -in cert.pem -out cert.der
´
-outform DER
DER
PEM
openssl x509 -in cert.der inform DER
´
–out cert.pem -outform PEM
DER key
PEM key
openssl rsa in input.key inform DER out
´
output.key outform PEM
PEM
PKCS#12
openssl pkcs12 -export -out cert.p12 -inkey
´
userkey.pem -in usercert.pem
PKCS#12
PEM CERT
openssl pkcs12 -clcerts -nokeys –in cert.p12
´
-out usercert.pem
PKCS#12
PEM KEY
openssl pkcs12 -nocerts -in cert.p12
´
–out userkey.pem
Aby wy
Ğwietliü informacjĊ o certyfikacie, np. informacje podane podczas tworzenia
wniosku, nale
Īy uruchomiü program OpenSSL z nastĊpującymi parametrami:
ca:/etc/ssl# openssl x509 -in servercert.pem -subject –noout
subject= /C=PL/ST=Slask/O=Helion/CN=server1
22
Sieci VPN. Zdalna praca i bezpiecze
þstwo danych
Je
Ğli dodasz parametr
-issuer
, OpenSSL zwróci tak
Īe informacjĊ o wystawcy (CA):
ca:/etc/ssl# openssl x509 -in servercert.pem -issuer -subject –noout
subject= /C=PL/ST=Slask/O=Helion/CN=server1
issuer= /C=PL/ST=Slask/L=Gliwice/O=Helion/CN=CA
Je
Īeli certyfikat jest w formie binarnej (DER), do powyĪszej skáadni naleĪy dodaü pa-
rametr
-inform DER
.
3.3. Kompilacja biblioteki openssl
ze
Ēródeä
Ko
Ĕcząc rozdziaá dotyczący biblioteki openssl, zamieszczam instrukcjĊ opisującą, jak
skompilowa
ü i zainstalowaü bibliotekĊ „rĊcznie”. Powodów, dla których miaábyĞ sa-
modzielnie kompilowa
ü program OpenSSL, moĪe byü kilka. Najbardziej prawdopo-
dobny z nich to ch
Ċü podania przy kompilacji jakiejĞ opcji, której nie przewidzieli
twórcy dystrybucji Twojego systemu. Innym powodem mo
Īe byü chĊü zaktualizowania
istniej
ącej wersji w dystrybucjach, które nie mają dobrze zorganizowanego systemu
aktualizacji (np. Slackware ;-)).
Je
Ğli decydujesz siĊ na wáasną kompilacjĊ, musisz sukcesywnie aktualizowaü bibliotekĊ
w razie pojawienia si
Ċ wykrytych báĊdów.
W dystrybucji Debian, której u
Īywam, paczka SSL dostarczana wraz z systemem nie
by
áa skompilowana z obsáugą biblioteki zlib, w związku z czym nie mogáem uĪyü tego
algorytmu kompresji w programie Stunnel.
Je
Ğli z jakichĞ powodów chcesz skompilowaü bibliotekĊ openssl, poniĪej w punktach
zamieszczam opis, jak to zrobi
ü.
1.
Pobierz ze strony http://www.openssl.org/source/
Ĩródáa najnowszej wersji
pakietu i zapisz w katalogu /usr/src/.
2.
Porównaj warto
Ğü MD5 pliku pobranego z sieci (polecenie
md5sum
)
z warto
Ğcią udostĊpnioną na stronie openssl.org.
3.
Rozpakuj zawarto
Ğü archiwum poleceniem
tar zxf openssl-<nr_wersji>.tar.gz
.
4.
Przejd
Ĩ do katalogu openssl-<nr_wersji>.
5.
Przed przyst
ąpieniem do kompilacji musisz ustaliü, w którym katalogu
program ma zosta
ü zainstalowany oraz z jakimi dodatkowymi opcjami,
podaj
ąc je jako parametry skryptu ./config. W poniĪszym przykáadzie
skompilujemy program z obs
áugą biblioteki zlib, a wynikowy program
zostanie zainstalowany w katalogu /usr/local/openssl. Wpisz polecenie:
srv:~# ./config --prefix=/usr/local zlib
6.
Je
Ğli skrypt ./config nie zgáosi báĊdu, moĪemy przejĞü do wáaĞciwej kompilacji
programu. W tym celu wpisz polecenie
make
.
Rozdzia
ä 3.
i SSL jako standard bezpiecznego przesyäania danych
23
7.
Proces kompilacji mo
Īe potrwaü kilka minut, po jego zakoĔczeniu moĪesz
przej
Ğü do ostatniego kroku — instalacji skompilowanych plików we wáaĞciwych
katalogach.
8.
Aby zako
Ĕczyü instalacjĊ, wpisz polecenie
make install
.