Å sette én klients tilgang på pause og å fjerne den for godt ser ut som samme oppgave helt til du prøver å angre en av dem. Tilbakekalling av et sertifikat skriver en oppføring som serveren behandler som endelig, og å reversere den betyr å redigere utstederens database for hånd. Å droppe den levende tunnelen er en administrasjonskommando som ikke endrer noe med tillit. Velg spaken ved å spørre om nøkkelen fortsatt er til å stole på, ikke ved å spørre hvor haster forespørselen føles.

Troen: tilbakekalt og suspendert er det samme

En underleverandør settes på pause i en uke, og refleksen er å tilbakekalle, fordi tilbakekalling høres ut som å slå noe av. Det ser ryddig ut, det tar ti sekunder, og det etterlater en databaseredigering som den eneste veien tilbake. Refleksen er forståelig, og den er nærmere å brenne et pass enn å lukke en dør. En enhet på pause og en kompromittert nøkkel trenger ulik behandling, og bare én av dem er billig å reversere.

Forskjellen handler om legitimasjonen og ikke om personen. En nøkkel som fortsatt er i de riktige hendene kan settes på pause og gjenopptas uten tap av tillit. En nøkkel som kan ha blitt kopiert bør aldri gjenopprettes, fordi gjenoppretting hevder at kopien ikke finnes.

Skriv ned svaret før du rører noen av de to systemene. Hvis du ikke kan si om nøkkelen er eksponert, er det konservative svaret utskifting.

Dropp den levende økten med administrasjonsgrensesnittet

OpenVPN tilbyr et administrasjonsgrensesnitt som kan liste økter og drepe en av dem etter fellesnavn. Aktiver det på localhost, hold det unna det offentlige grensesnittet, og send drep-kommandoen når en økt må forsvinne nå. Kommandoen lukker bare den tunnelen, og alle andre klienter fortsetter å virke.

Dette er et svar på et aktivt problem, ikke en suspensjonspolicy. Samme profil kan koble til igjen i løpet av et minutt, fordi ingenting ved legitimasjonen er endret. Bruk den når økten må bort og den varige beslutningen fortsatt tas.

Bekreft at økten var tilkoblet før du dreper den, så du ikke jakter en klient som aldri koblet til. Statuskommandoen nedenfor skriver ut det som er tilkoblet akkurat nå.

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

Hvis drepingen rapporterer at det ikke finnes en slik klient, er fellesnavnet i sertifikatet ikke strengen du skrev. Les statusutdataene i stedet for navnet på profilfilen.

Hva CRL-en faktisk styrer

Serveren rådfører seg ikke med et tilbakekallingsflagg som er lagret på sertifikatet. Den leser sertifikatets tilbakekallingsliste som er navngitt i crl-verify, ved hver ny tilkobling, og avviser et sertifikat der serienummeret står på den listen. To konsekvenser følger, og begge betyr noe driftsmessig. Filen må være lesbar for kontoen serveren gir fra seg privilegiene til, og en allerede tilkoblet klient fortsetter å kjøre til den kobler til på nytt.

Den andre konsekvensen overrasker folk under hendelser. Tilbakekalling av et sertifikat lukker ikke tunnelen som bruker det akkurat nå. Par tilbakekallingen med en administrasjonsdrap hvis økten må avsluttes umiddelbart, og behandle de to handlingene som separate trinn i runbooken.

Inspiser listen for å se hva serveren faktisk vil håndheve, i stedet for å stole på tidsstempelet til den siste filen du kopierte. Antallet serienumre er den delen som betyr noe.

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

En liste uten oppføringer og en liste med de riktige oppføringene ser identiske ut i en katalogoppføring, og derfor er det verdt å skrive ut antallet serienumre. Tillatelseslinjen betyr like mye, fordi en fil som daemonen ikke kan lese gir en feil som ser ut som en avvist klient.

Gjenopprette en oppføring, forsiktig

Å gjenopprette et sertifikat betyr å snu en oppføring i utstedelsesdatabasen og publisere en ny liste. easy-rsa 3 holder den databasen som index.txt under PKI-katalogen, mens eldre oppsett brukte en annen ordning. En rad begynner med en statusbokstav og en utløpsdato. En tilbakekalt rad setter inn et tidsstempel for tilbakekallingen før den fortsetter med serienummeret, filnavnet til sertifikatet og det distinkte navnet. Å sette en rad tilbake betyr å slette det tidsstempelet og snu bokstaven, mens alt annet får være i fred.

Ta sikkerhetskopi av filen først, og gjør endringen som et skript i stedet for å skrive i en teksteditor. En skrivefeil som endrer hvor mange felt en rad har, ødelegger utstedelsen for hvert sertifikat som legges til etterpå. Det er grunnen til å automatisere endringen og kopiere filen før du rører den.

En ny tilbakekalling av samme navn mislykkes ofte også, fordi den første kjøringen flyttet det sertifikatet og nøkkelen ut av katalogene verktøyet forventer å finne dem i. Verktøyet finner da ikke det det ble bedt om å tilbakekalle, og feilmeldingen er ikke alltid tydelig på hvorfor.

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

Publiser den nye listen, rett opp eierskapet, og få serveren til å lese den. En omlasting er nok på de fleste installasjoner, men bekreftelsen må komme fra en fersk tilkobling, siden den eksisterende økten aldri sjekket noe på nytt.

Sjekk hvilken spak saken fortjener

Still det ene spørsmålet som avgjør hele runbooken: er den private nøkkelen fortsatt bare der den skal være. Hvis den er det, dekker drapet på økten pluss en dokumentert pause saken og etterlater ingen permanent oppføring. Hvis den ikke er det, er det eneste trygge svaret en ny nøkkel mens det gamle sertifikatet blir stående tilbakekalt.

Verifiser deretter resultatet med et tilkoblingsforsøk i stedet for med en konfigurasjonsforskjell. Forskjellen forteller deg hva du mente, og tilkoblingen forteller deg hva serveren håndhever.

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

Når en gjenopprettet klient kobler til og vises i statusutdataene, virket redigeringen av oppføringen. Når en tilbakekalt klient avvises og loggen nevner CRL-en, virket tilbakekallingen. Alt imellom er et tillatelses- eller omlastingsproblem, og det er verdt å rette før den neste forespørselen kommer.

Relaterte artikler