Pausar l’accés d’un client i eliminar-lo per sempre semblen la mateixa tasca fins que proveu de desfer una de les dues coses. Revocar un certificat escriu un registre que el servidor tracta com a definitiu, i revertir-ho vol dir editar a mà la base de dades de l’emissor. Descartar el túnel viu és una ordre de gestió que no canvia res en la confiança. Trieu la palanca preguntant si la clau encara és digna de confiança, no preguntant com d’urgent sembla la petició.

La creença: revocat i suspès són el mateix

Un contractista es pausa durant una setmana i el reflex és revocar, perquè revocació sona com apagar alguna cosa. Sembla endreçat, triga deu segons i deixa una edició de la base de dades com a únic camí de tornada. El reflex és comprensible i s’assembla més a cremar un passaport que a tancar una porta. Un dispositiu pausat i una clau compromesa necessiten un tracte diferent, i només un dels dos és barat de revertir.

La distinció és sobre la credencial i no sobre la persona. Una clau que encara és a les mans correctes es pot pausar i reprendre sense cap pèrdua de confiança. Una clau que pot haver estat copiada no s’hauria de restaurar mai, perquè restaurar afirma que la còpia no existeix.

Escriviu la resposta abans de tocar qualsevol dels dos sistemes. Si no podeu dir si la clau està exposada, la resposta conservadora és la substitució.

Descarteu la sessió viva amb la interfície de gestió

OpenVPN ofereix una interfície de gestió que pot llistar sessions i matar-ne una pel nom comú. Activeu-la a localhost, manteniu-la lluny de la interfície pública i envieu l’ordre de matar quan una sessió hagi de desaparèixer ara. L’ordre tanca només aquell túnel, i tots els altres clients continuen funcionant.

Això és una resposta a un problema actiu, no una política de suspensió. El mateix perfil es pot reconnectar en un minut, perquè no ha canviat res de la seva credencial. Feu-lo servir quan la sessió ha de marxar i la decisió duradora encara s’està prenent.

Confirmeu que la sessió estava connectada abans de matar-la, per no caçar un client que mai no s’ha connectat. L’ordre d’estat de sota mostra què hi ha connectat ara.

printf 'status 2\nquit\n' | nc 127.0.0.1 7506
printf 'kill kiosk-14\nquit\n' | nc 127.0.0.1 7506

Si l’ordre de matar informa que no hi ha cap client així, el nom comú del certificat no és la cadena que heu escrit. Llegiu la sortida d’estat en lloc del nom del fitxer de perfil.

Què controla realment la CRL

El servidor no consulta cap marca de revocació desada al certificat. Llegeix la llista de revocació de certificats indicada per crl-verify, a cada connexió nova, i rebutja un certificat el número de sèrie del qual apareix en aquesta llista. Se’n deriven dues conseqüències, i totes dues importen operativament. El fitxer ha de ser llegible pel compte al qual el servidor baixa privilegis, i un client ja connectat continua funcionant fins que es reconnecta.

Aquesta segona conseqüència sorprèn la gent durant els incidents. Revocar un certificat no tanca el túnel que l’està utilitzant. Apareu la revocació amb una mort de gestió si la sessió ha d’acabar immediatament, i tracteu les dues accions com a passos separats del manual.

Inspeccioneu la llista per veure què aplicarà realment el servidor, en lloc de confiar en la marca de temps de l’últim fitxer que heu copiat. El recompte de sèries és la part que importa.

openssl crl -in /etc/openvpn/server/crl.pem -noout -text | sed -n '1,14p'
ls -l /etc/openvpn/server/crl.pem

Una llista sense entrades i una llista amb les entrades correctes semblen idèntiques en un llistat de directori, i per això val la pena imprimir el recompte de sèries. La línia de permisos importa igual, perquè un fitxer que el dimoni no pot llegir produeix un error que sembla un client rebutjat.

Restaurar un registre, amb cura

Restaurar un certificat vol dir invertir un registre a la base de dades d’emissió i publicar una llista nova. easy-rsa 3 guarda aquesta base com a index.txt dins del directori PKI, mentre que les disposicions més antigues feien servir un altre arranjament. Una fila comença amb una lletra d’estat i una data de caducitat. Una fila revocada insereix una marca de temps per a la revocació abans de continuar amb el número de sèrie, el nom del fitxer del certificat i el nom distingit. Tornar una fila al seu lloc vol dir esborrar aquella marca de temps i girar la lletra, deixant tota la resta tranquil·la.

Feu una còpia de seguretat del fitxer primer, i escriviu l’edició com a script en lloc de teclejar en un editor de text. Una errata que canvia quants camps porta una fila trenca l’emissió de cada certificat afegit després. Aquesta és la raó per automatitzar el canvi i copiar el fitxer abans de tocar-lo.

Una segona revocació del mateix nom sovint també falla, perquè la primera execució va traslladar aquell certificat i la seva clau fora dels directoris on l’eina espera trobar-los. L’eina aleshores no pot trobar allò que se li ha demanat revocar, i el missatge d’error no sempre explica per què.

cp /etc/easy-rsa/pki/index.txt /root/index.txt.$(date +%F-%H%M)
grep -c '^R' /etc/easy-rsa/pki/index.txt
easyrsa gen-crl

Publiqueu la llista nova, correu la seva propietat i feu que el servidor la llegeixi. Una recàrrega n’hi ha prou a la majoria d’instal·lacions, però la confirmació ha de venir d’una connexió nova, perquè la sessió existent no ha tornat a comprovar res.

Comproveu quina palanca mereix el cas

Feu la pregunta que decideix tot el manual: la clau privada encara és només on ha de ser. Si ho és, la mort de la sessió més una pausa documentada cobreix el cas i no deixa cap registre permanent. Si no ho és, l’única resposta segura és una clau nova amb el certificat vell deixat com a revocat.

Després verifiqueu el resultat amb un intent de connexió i no amb una diferència de configuració. La diferència us diu què preteníeu, i la connexió us diu què aplica el servidor.

openssl crl -in /etc/openvpn/server/crl.pem -noout -text | grep -c 'Serial Number'
printf 'status 2\nquit\n' | nc 127.0.0.1 7506

Quan un client restaurat es connecta i apareix a la sortida d’estat, l’edició del registre ha funcionat. Quan un client revocat és refusat i el registre anomena la CRL, la revocació ha funcionat. Qualsevol cosa entremig és un problema de permisos o de recàrrega, i val la pena arreglar-lo abans que arribi la petició següent.

Articles relacionats