Vaje: VPN - CA
Postavili bomo certifikatno agencijo in jo uporabili za avtentikacijo na VPN.
Na prejšnjih vajah ste s sosedom vzpostavili navidezno lokalno omrežje. Pri tem ste si morali s sosedom izmenjati ključ, s katerim ste potem kodirali ves promet. Slabost tovrstne izmenjave ključev je predvsem v tem, da lahko napadalec, ki je zajel kriptiran promet, nato pa pridobil še ključ, dekodira vse zajete podatke, tudi tiste, ki jih je dobil v preteklosti. Včasih je tudi težko vzpostaviti varen kanal, po katerem bi lahko prenesli ključ.
Prenašanju ključev po varnih kanalih se lahko izognemo z uporabo asimetrične kriptografije. Kot bonus dobimo možnost vzpostavitve VPN med več kot dvema računalnikoma.
Predpriprava
- Imejte pripravljeno rešitev prejšnje naloge.
- Preberite, kako se lahko uporabnik predstavi z javnim ključem in kaj je algoritem Diffie-ja in Hellmana
Naloga
Spravite se v trojke. Določite, kdo bo strežnik za VPN (imenujmo ga a
); preostala dva člana skupine bosta odjemalca b
in c
. Odjemalec c
naj postavi certifikatno agencijo (CA, angl. certificate authority).
- Poskrbite, da bodo vaši računalniki lahko dostopali drug do drugega.
c
ustvari certifikatno agencijo.a
postavi strežnik VPN, na katerega se povežetab
inc
.
Nato s sošolci v drugih skupinah:
- Kot odjemalec se povežite na strežnik v drugi skupini.
- Postavite omrežje z najmanj dvema hopoma, ki bo v celoti delovalo.
Navodila
Navodila v tej nalogi so povzeta po dveh dokumentih z domače strani OpenVPN:
Če ste manjkali na prejšnjih vajah, namestite openvpn
:
# apt install openvpn
Če bi radi pogledali, katere datoteke na sistemu pripadajo paketu openvpn
, lahko poizkusite z:
# dpkg -L openvpn
Certifikatna agencija
Pri namestitvi openvpn
dobimo paket easy-rsa
, ki vsebuje nekaj skript za lažje ustvarjanje in podpisovanje ključev. Nahajajo se v /usr/share/easy-rsa
. Z uporabo teh skript boste najprej ustvarili CA, da boste lahko podpisovali ključe odjemalcev. Najprej naredite nov imenik in vanj skopirajte skripte:
c$ mkdir openvpn-ca
c$ cp -R /usr/share/easy-rsa/* openvpn-ca
c$ cd openpvn-ca
Nato v ukazno lupino naložite datoteko z nastavitvami vars
in ustvarite CA:
c$ source ./vars
c$ ./clean-all
c$ ./build-ca
Državo, mesto, organizacijo in ostale podatke nastavite po lastni presoji. V podimeniku keys
boste dobili nekaj datotek, med drugim ca.crt
. To je certifikat zasebnega ključa agencije, ki ga boste morali prenesti na ostale računalnike v skupini, da bodo lahko zaupali podpisom vaše CA.
Ustvarite ključ in certifikat za strežnik OpenVPN:
c$ ./bulid-key-server streznik
Geslo lahko pustite prazno. Zgenerirajte še parametre za izmenjavo skrivnosti po protokolu, ki sta si ga izmislila Diffie in Hellman:
c$ ./build-dh
Datoteke ca.crt
, dh2048.pem
, streznik.crt
in streznik.key
skopirajte na računalnik, kjer boste poganjali strežnik VPN:
c$ scp ca.crt dh2048.pem streznik.crt streznik.key <username>@<a>:
Strežnik
Ustvarite imenik openvpn-server
, vanj skopirajte datoteko s primerom konfiguracije strežnika OpenVPN in jo popravite:
a$ mkdir openvpn-server
a$ zcat /usr/share/doc/openvpn/exapmles/sample-config-files/server.conf.gz > server.conf
a$ vi server.conf
V tej datoteki:
- odkomentirajte nastavitev
client-to-client
; - zakomentirajte nastavitev
tls-auth
; - popravite nastavitvi
key
incert
, da bosta kazali nastreznik.key
instreznik.crt
; in - popravite nastavitvi
ca
indh
, da kažeta na datotekica.crt
indh2048.pem
.
Bravo! Skonfigurirali ste strežnik. Zaženite ga:
a# openvpn --config server.conf
Odjemalec
Vsak odjemalec mora ustvariti zasebni ključ, s katerim bo strežniku izkazal svojo istovetnost. Odjemalec, na katerem je CA, lahko ključ ustvari in podpiše neposredno:
c$ cd openvpn-ca
c$ ./build-key <ime>
Po tem se ključ in podpisan certifikat nahajata v datotekah keys/<ime>.key
oziroma keys/<ime>.crt
.
Ostali odjemalci najprej skopirajo skripte easy-rsa
v nov imenik, naložijo spremenljivke v datoteki vars
in pripravijo okolje:
b$ mkdir openvpn-client
b$ cp -R /usr/share/easy-rsa/* openvpn-client
b$ cd openpvn-client
b$ source ./vars
b$ ./clean-all
Nato ustvarite zasebni ključ in zahtevek za podpis certifikata (angl. certificate signing request):
b$ ./build-req <ime>
Ta ukaz v podimeniku keys
ustvari datoteki <ime>.key
(zasebni ključ) in <ime>.csr
(zahtevek za podpis). Slednjo datoteko spravite na računalnik c
. Tam podpišite zahtevo, da ustvarite končni certifikat:
c$ ./sign-req <ime>
Zdaj imate v imeniku keys
datoteko <ime>.crt
, ki jo skopirajte nazaj na odjemalca. Uporaba zahtevkov za podpis omogoča, da CA podpiše ključ, ne da bi zasebni del ključa kadarkoli zapustil odjemalčev računalnik – c
dobi le zahtevek, ne pa zasebnega ključa, in vrne certifikat.
Na obeh odjemalcih skopirajte datoteko s primerom nastavitev za OpenVPN client.conf
, ki jo najdete poleg server.conf.gz
. Datoteko popravite tako, da nastavite:
- zakomentirajte nastavitev
tls-auth
; remote
nastavite na IP strežnika;cert
nastavite na<ime>.crt
; inkey
nastavite na<ime>.key
.
Potem zaženete openvpn:
# openvpn --config client.conf
Možne težave
Če gre nekaj narobe pri podpisovanju odjemalčevega certifikata, je mogoče, da boste morali iz datoteke keys/index.txt
odstraniti vnos s ključem odjemalca. Probleme imate lahko tudi, če niste lastnik datoteke ~/.rnd
- v tem primeru pač izvedite
# chown jazst.jazst ~/.rnd