OpenVPN - předčasné odvolání klientského certifikátu

Nedávno jsem řešil situaci, kdy jsem potřeboval znemožnit přístup do sítě přes OpenVPN jednomu z klientů dříve, než jeho certifikát vyprší. Odvolání SSL certifikátu je sice záležitostí jednoduchou, méně snadné ale je donutit OpenVPN, aby tuto změnu brala na vědomí.


Ve standardní konfiguraci totiž OpenVPN přijme klienta, který se prokáže jakýmkoliv certifikátem, platným pro daný server. To, jestli je opravdu platný (tzn. nebyl odvolán dříve, než skončila jeho platnost) nijak nekontroluje. Když jsem začal vyhledávat informace, které by mi pomohly situaci vyřešit, zjistil jsem, že jich na Internetu existuje jen velice málo. Jak se zdá, předčasné odvolání certifikátu zřejmě není tak častou záležitostí, jak by se na první pohled mohlo zdát.

Asi po třech hodinách usilovného pátrání, čtení manuálů a různých návodů, se mi podařilo najít řešení celého problému:

1) Je potřeba vytvořit revokační certifikát pro OpenSSL
OpenSSL používá tzv. CRL, tedy certificate revocation list (seznam odvolaných certifikátů). K tomu, aby OpenVPN mohla kontrolovat tento seznam, potřebujeme právě revokační certifikát. Získáme jej pomocí klíče a certifikátu OpenSSL následujícím příkazem:

# openssl ca -gencrl -keyfile cakey.pem -cert cacert.pem -out cacrl.pem

kde cakey.pem je SSL klíč CA (certifikační autority), cacert.pem je SSL certifikát CA a cacrl.pem je výsledný CRL certifikát.
Nyní si můžeme jeho funkčnost ověřit příkazem:

# openssl crl -in cacrl.pem -noout -text

který vypíše na konzoli seznam odvolaných certifikátů(*).

2) Je třeba nakonfigurovat OpenVPN tak, aby při přihlašování klienta kontrolovala platnost certifikátu pomocí CRL
Aby OpenVPN zkontrolovala, zda certifikát, pomocí kterého se klient přihlašuje, nebyl předčasně odvolán, stačí do konfiguračního souboru vpn_server.conf přidat jediný řádek:

crl-verify /etc/ssl/CA/cacrl.pem

kde /etc/ssl/CA/cacrl.pem je cesta k CRL certifikátu.
Nyní stačí restartovat OpenVPN a v logu by se měly začít objevovat následující záznamy:

CRL CHECK OK: /C=CZ/ST=Czech_Republic/L=Prague/O=ONAME/OU=OUNAME/CN=CNAME/emailAddress=email@vydavatele.cz (při přihlášení platným certifikátem)
a
CRL CHECK FAILED: /C=CZ/ST=Czech_Republic/O=ONAME/CN=CNAME/emailAddress=email@klienta.cz is REVOKED (při přihlášení odvolaným certifikátem).

Snad tenhle mininávod někomu bude užitečný :)

(*) Pro ty kteří neví, jak certifikát odvolat:

# openssl ca -revoke klient.pem (kde klient.pem je certifikát, který chceme odvolat)


Ohodnoťte tento článek:

Přidej odkaz na:
| | | | vybrali.sme.sk |
del.icio.us | TextTip.cz

Komentáře