OpenVPN #3: Vydavani a sprava klientskych certifikatu

Minule jsme nakonfigurovali OpenVPN v PtP rezimu. Tedy dve zarizeni mezi sebou. Vetsinou vsak potrebujeme pripojit hodne klientu k jednomu serveru. Slo by opet pouzit sdileny klic (konfiguracni soubor by se musel upravit), ale je to neefektivni. Proto si ukazeme, jak vydavat, podepisovat a spravovat SSL certifikaty. Ziskame naprostou kontrolu nad klienty a kdykoliv muzeme komukoliv zakazat pristup.

Prace s certifikaty

Na praci s certifikaty pouzijeme zname a siroce pouzivane OpenSSL. Budeme potrebovat vytvorit certifikacni autoritu a vygenerovat certifikaty pro server a klienty. Autorita je nasledne musi podepsat. Jiste jde pouzit samotne OpenSSL, ale je potreba ho nastavit. OpenVPN obsahuje v prikladech ukazkove skripty na kompletni praci s certifikaty. Urcite je vhodne je pouzit.

Nejdrive zkopirujeme skripty z ukazek do adresare k OpenVPN a nastavime mu prava, aby do nej nemohl kazdy lezt (jsou v nem tajne klice):

Veskera konfigurace je umistena v souboru vars, ktery musime upravit. Dulezita jsou nize uvedene parametry, zbytek muzeme ponechat ve vychozim stavu:

obsah je samovysvetlujici. Expiraci klice pro autoritu je vhodne nechat na dlouho, 10 let je optimalni. Pro klienty je to na zvazeni kazdeho, ale v pripade potreby je mozne klientsky certifikat kdykoliv zneplatnit, takze o nic nejde (a nebudeme muset kazdy rok klientovi nastavovat vsechny pc).

Protoze je nastaveni resene formou promennych, vzdy pred praci s certifikaty musime tyto promenne nacist:

Tecka na zacatku musi byt! Protoze easyrsa obsahuje vzorove klice smazeme je. Nasledne vytvorime klice certifikacni autority a Diffie Hellman parametry:

Clean-all smaze vsechny klice, proto ho spustime pouze poprve a potom uz nikdy, jinak prijdeme o certifiakty!

Generovani Diffie Hellman muze trvat hodne dlouho, zalezi na dostupne entropii. Posledni radek vygeneruje certifikat pro OpenVPN server.

A konecne muzeme pristoupit ke generovani certifikatu pro klienty. Muzeme vygenerovat klice s heslem, nebo bez hesla. Z hlediska bezpecnosti klientum (lidem) vzdy vytvorime heslo. Naopak pro bezobsluzne prihlaseni, napr. na nejakem routeru heslo nepouzijeme – jinak se behem bootovani tunel sam nesestavi, protoze se bude cekat na rucni zadani hesla. Heslo jde pozdeji z certifikatu odstranit, nebo naopak pridat. Budu predpokladat, ze je budeme generovat pozdeji, proto uvedu kompletni navod pro pozdejsi pouziti:

Prvni certifikat bude pro uzivatele pepa s heslem a druhy pro uzivatele martin bez hesla.

Po vygenerovani certifikatu se pruvodce pta na pripadnou zmenu voleb ze souboru vars. Pokud budeme jen slepe mlatit do enteru, budeme mit problem. Uplne na konci se totiz pruvodce pta, zda chcete vytvoreny certifikat podepsat certifikacni autoritou a pridat ho do databaze certifikatu. Pokud rucne nenapiseme y a nepotvrdime, klient se nebude moci s certifikatem pripojit! Certifikaty jde podepsat i dodatecne, ale je to prace navic 🙂

Vsechny vytvorene klice jsou v /etc/openvpn/easy-rsa:

OpenVPN server ke svemu behu potrebuje tucne oznacene soubory. Jedna se o verejny certifikat certifikacni autority, proti kteremu se budou kontrolovat klientske certifikaty. Dale o certifikat a klic serveru. Soubor ca.key hlidame jako oko v hlave, pomoci nej je mozne podepisovat certifikaty novych klientu! ca.key nikdo nikdy nesmi dostat!

Klientum budeme distribouvat certifikat autority, vlastni certifikat a vlastni klic. Priklad pro klienta martin: dame mu soubory: ca.crt, martin.crt a martin.key.

Certifikaty pro server nakopirujeme do /etc/openvpn. Jde to elegantne jednim prikazem, nebo treba pomoci mc. Je to jedno.

Nastaveni serveru

Popis zbyvajicich parametru je v minulem dile, pripadne se da dohledat v dokumetnaci k OpenVPN.

Nastaveni klienta

/etc/openvpn/firma_server_cz.conf:

Za zminku stoji hlavne parametr pull. Ten povoli prijeti push od serveru. Jinak bude klient ignorovat routovaci pravidla a dhcp parametry ziskane od serveru.

Zjednoduseni nastaveni klienta

Jak je videt, klient potrebuje certifikat ca, svuj certifikat a svuj klic. Nekdy muze byt obtezujici mit samostatny soubor s nastavenim a samostatne soubory s klici. V novych verzich OpenVPN je mozne zapsat certifikaty a klic primo do souboru s nastavenim:

Jde o takzvany inline zapis. Radky ca, cert a key nahradime primo obsahem daneho souboru.

Jeste vetsi zjednoduseni klienta

V ramci pohodlnosti nam muze zacit vadit mit tri soubory s certifikaty/klicem. Vse muzeme dat do jednoho souboru typu PKCS 12. Je to specialni format archivu, ktery v sobe obsahuje dalsi kryptograficke objekty.

Pri generovani certifiktu pro klienta na server nepouzijeme build-key-pass, ale build-key-pkcs12:

Adresar keys i nadale bude obsahovat soubory martin.crt, martin.csr a martin.key. Navic pribude archiv martin.p12 a prave ten dame klientovi spolu se souborem client.conf:

Pokud budeme chtit pouzit inline zapis pro PKCS12, musime ho nejdrive prevest do base64. PKCS12 soubory jsou totiz binarni. Jde to treba pomoci OpenSSL:

V souboru s nastavenim nahradime cestu inline zapisem:

Pokud uz mame vygenerovane klice pro klienty pomoci build-key-pass a chceme ze souboru udelat PKC12 soubor, nebo naopak z PKCS12 chceme udelat samostatne soubory, jde to opet pomoci OpenSSL. Je take mozne jenom vypsat informace:

Prvni dva prikazy funguji naproste skvele. Mensi problem je s poslednim. Sice rozbali PKCS12, ale vytvori jeden PEM (ASCII) soubor martin.cer, ve kterem jsou certifikaty uzivatele, certifikacni autority a klic uzivatele. I to se da resit, ale jsou na to potreba tri samostatne prikazy:

Zneplatneni / revokace klientskych certifikatu

Cas od casu nastane pripad, kdy je potreba certifikat urciteho klienta zneplatnit. Klientovi ukradnou notebook, propustime zamestnance,…

Pro revokaci certifikatu slouzi nastroje:

  • list-crl – zobrazi vypis revokovanych certifiaktu. Pokud pri vytvareni certifikatu zadavame inteligentni jmena, hned vidime, o koho jde (Issuer: /C=CZ/ST=Czech Republic/L=Mesto/O=Firma/OU=changeme/CN=changeme/name=changeme/emailAddress=mail.spravce@firma.cz)
  • revoke-full martin – znaplatni certifikat uzivateli martin. Pozor: prikaz se nepta na potvrzeni! Po spusteni ihned provede revokaci!

Po revokaci vznikne v adresari keys soubor crl.pem, ktery obsahuje informace o revokovanych certifikatech. Prave ten musi mit OpenVPN server k dispozici, aby mohl kontrolovat, jestli neni certifikat revokovany. Po revokaci je vzdy nutne soubor zkopirovat, pripadne si „kopirovaci prikaz“ dopsat do souboru revoke-full a predejit tak zapomeni. Muzeme take vytvorit odkaz na soubor a nastavit potreba prava. Reseni je vice.

Pro infomaci o aktualnim stavu certifikatu se staci podivat do souboru index.txt v adresari keys:

Zde je krasne videt potreba vyplnovat pri generovani realne udaje. Pouze z posledniho certifikatu je jasne patrne, komu patri. Druhy certifiakt s „R“ na zacatku radku byl revekovany a uz neplati.

 

Priste si ukazeme, jak vytvorit VPN pro pouziti na nezabezpecenych sitich (free WiFi), ktera projde temer vsemi firewally.

Dalsi clanky o OpenVPN.

 

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *