A pune în pauză accesul unui client și a-l elimina definitiv par aceeași sarcină până când încercați să anulați una dintre ele. Revocarea unui certificat scrie o înregistrare pe care serverul o tratează ca definitivă, iar anularea ei înseamnă editarea manuală a bazei de date a emitentului. Renunțarea la tunelul activ este o comandă de administrare care nu schimbă nimic în încredere. Alegeți pârghia întrebând dacă cheia mai este de încredere, nu întrebând cât de urgentă pare cererea.

Convingerea: revocat și suspendat sunt același lucru

Un contractor este pus în pauză o săptămână, iar reflexul este revocarea, pentru că revocarea sună ca oprirea a ceva. Pare ordonat, durează zece secunde și lasă editarea bazei de date ca singura cale de întoarcere. Reflexul este de înțeles și este mai aproape de a arde un pașaport decât de a închide o ușă. Un dispozitiv pus în pauză și o cheie compromisă au nevoie de tratamente diferite, și doar unul dintre ele este ieftin de anulat.

Distincția privește acreditarea și nu persoana. O cheie care este încă în mâinile potrivite poate fi pusă în pauză și reluată fără nicio pierdere de încredere. O cheie care ar fi putut fi copiată nu ar trebui restaurată niciodată, pentru că restaurarea afirmă că nu există copie.

Scrieți răspunsul înainte de a atinge oricare dintre cele două sisteme. Dacă nu puteți spune dacă cheia este expusă, răspunsul conservator este înlocuirea.

Renunțați la sesiunea activă cu interfața de administrare

OpenVPN expune o interfață de administrare care poate lista sesiuni și poate ucide una dintre ele după numele comun. Activați-o pe localhost, țineți-o departe de interfața publică și trimiteți comanda de ucidere când o sesiune trebuie să dispară acum. Comanda închide doar acel tunel, iar orice alt client continuă să funcționeze.

Acesta este un răspuns la o problemă activă, nu o politică de suspendare. Același profil se poate reconecta într-un minut, pentru că nimic din acreditarea lui nu s-a schimbat. Folosiți-o când sesiunea trebuie să plece și decizia durabilă încă se ia.

Confirmați că sesiunea era conectată înainte să o ucideți, ca să nu urmăriți un client care nu s-a conectat niciodată. Comanda de stare de mai jos afișează ce este conectat în acest moment.

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

Dacă uciderea raportează că nu există un astfel de client, numele comun din certificat nu este șirul pe care l-ați tastat. Citiți ieșirea de stare în locul numelui fișierului de profil.

Ce controlează de fapt CRL

Serverul nu consultă un indicator de revocare stocat pe certificat. Citește lista de revocare a certificatelor indicată în crl-verify, la fiecare conexiune nouă, și respinge un certificat al cărui număr de serie apare pe acea listă. Din asta decurg două consecințe, și ambele contează operațional. Fișierul trebuie să fie lizibil pentru contul către care serverul își cedează privilegiile, iar un client deja conectat continuă să funcționeze până când se reconectează.

A doua consecință surprinde oamenii în timpul incidentelor. Revocarea unui certificat nu închide tunelul care îl folosește chiar acum. Împerecheați revocarea cu o ucidere administrativă dacă sesiunea trebuie să se termine imediat, și tratați cele două acțiuni ca pași separați în manual.

Inspectați lista ca să vedeți ce va aplica serverul cu adevărat, în loc să vă bazați pe marcajul de timp al ultimului fișier copiat. Numărul de serii este partea care contează.

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

O listă fără intrări și o listă cu intrările corecte arată identic într-o listare de director, de aceea merită tipărit numărul de serii. Linia de permisiuni contează la fel de mult, pentru că un fișier pe care daemonul nu îl poate citi produce o defecțiune care seamănă cu un client respins.

Restaurarea unei înregistrări, cu grijă

Restaurarea unui certificat înseamnă inversarea unei înregistrări din baza de date de emitere și publicarea unei liste noi. easy-rsa 3 ține acea bază ca index.txt în directorul PKI, în timp ce aranjamentele mai vechi foloseau altă ordine. O linie începe cu o literă de stare și o dată de expirare. O linie revocată inserează un marcaj de timp pentru revocare înainte de a continua cu numărul de serie, numele fișierului certificatului și numele distinctiv. A pune o linie la loc înseamnă a șterge acel marcaj de timp și a inversa litera, lăsând tot restul în pace.

Faceți mai întâi o copie de siguranță a fișierului și realizați editarea ca script, în loc să tastați într-un editor de text. O greșeală de tastare care schimbă câte câmpuri are o linie strică emiterea pentru fiecare certificat adăugat după aceea. Acesta este motivul pentru a automatiza modificarea și a copia fișierul înainte de a-l atinge.

O a doua revocare a aceluiași nume eșuează adesea și ea, pentru că prima rulare a mutat certificatul și cheia lui din directoarele în care instrumentul se așteaptă să le găsească. Instrumentul nu mai găsește ce a fost rugat să revoce, iar mesajul de eroare nu explică întotdeauna clar de ce.

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

Publicați lista nouă, corectați proprietatea ei și faceți serverul să o citească. O reîncărcare este suficientă pe majoritatea instalărilor, dar confirmarea trebuie să vină dintr-o conexiune nouă, fiindcă sesiunea existentă nu a reverificat nimic.

Verificați ce pârghie merită cazul

Puneți întrebarea care decide tot manualul: cheia privată este încă doar unde ar trebui să fie. Dacă da, uciderea sesiunii plus o pauză documentată acoperă cazul și nu lasă nicio înregistrare permanentă. Dacă nu, singurul răspuns sigur este o cheie nouă, iar certificatul vechi rămâne revocat.

Apoi verificați rezultatul cu o încercare de conectare, nu cu o diferență de configurație. Diferența vă spune ce ați intenționat, iar conexiunea vă spune ce impune serverul.

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

Când un client restaurat se conectează și apare în ieșirea de stare, editarea înregistrării a funcționat. Când un client revocat este refuzat, iar jurnalul numește CRL, revocarea a funcționat. Orice între acestea este o problemă de permisiuni sau de reîncărcare și merită reparată înainte să sosească următoarea cerere.

Articole similare