Att pausa en klients åtkomst och att ta bort den för gott ser ut som samma uppgift tills du försöker ångra en av dem. Att återkalla ett certifikat skriver en post som servern behandlar som slutgiltig, och att vända den betyder att redigera utgivarens databas för hand. Att släppa den levande tunneln är ett administratörskommando som inte ändrar något i förtroendet. Välj spaken genom att fråga om nyckeln fortfarande är pålitlig, inte genom att fråga hur brådskande begäran känns.

Tron: återkallad och avstängd är samma sak

En underleverantör pausas i en vecka och reflexen är att återkalla, eftersom återkallelse låter som att stänga av något. Det ser prydligt ut, det tar tio sekunder, och det lämnar en databasredigering som enda väg tillbaka. Reflexen är begriplig och den ligger närmare att bränna ett pass än att stänga en dörr. En pausad enhet och en komprometterad nyckel behöver olika behandling, och bara en av dem är billig att vända.

Skillnaden handlar om legitimationen och inte om personen. En nyckel som fortfarande är i rätt händer kan pausas och återupptas utan någon förlust av förtroende. En nyckel som kan ha kopierats bör aldrig återställas, eftersom återställning hävdar att kopian inte finns.

Skriv ner svaret innan du rör något av de två systemen. Om du inte kan säga om nyckeln är exponerad är det konservativa svaret utbyte.

Släpp den levande sessionen med administrationsgränssnittet

OpenVPN erbjuder ett administrationsgränssnitt som kan lista sessioner och döda en av dem via common name. Aktivera det på localhost, håll det borta från det publika gränssnittet, och skicka dödakommandot när en session måste försvinna nu. Kommandot stänger bara den tunneln, och alla andra klienter fortsätter att fungera.

Det här är ett svar på ett aktivt problem, inte en avstängningspolicy. Samma profil kan ansluta igen inom en minut, eftersom inget i dess legitimation har ändrats. Använd det när sessionen måste bort och det varaktiga beslutet fortfarande fattas.

Bekräfta att sessionen var ansluten innan du dödar den, så att du inte jagar en klient som aldrig anslöt. Statuskommandot nedan skriver ut vad som är anslutet just nu.

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

Om dödandet rapporterar att ingen sådan klient finns är common name i certifikatet inte den sträng du skrev. Läs statusutdata i stället för profilfilens namn.

Vad CRL:en faktiskt styr

Servern rådfrågar inte en återkallelseflagga som lagras på certifikatet. Den läser certifikatets återkallelselista som namnges i crl-verify vid varje ny anslutning, och avvisar ett certifikat vars serienummer finns på den listan. Två konsekvenser följer, och båda spelar roll operativt. Filen måste vara läsbar för det konto som servern lämnar ifrån sig sina rättigheter till, och en redan ansluten klient fortsätter att köra tills den ansluter igen.

Den andra konsekvensen överraskar folk under incidenter. Att återkalla ett certifikat stänger inte tunneln som använder det just nu. Para ihop återkallelsen med ett administrativt dödande om sessionen måste avslutas omedelbart, och behandla de två åtgärderna som separata steg i runbooken.

Granska listan för att se vad servern faktiskt kommer att upprätthålla, i stället för att lita på tidsstämpeln för den senast kopierade filen. Antalet serienummer är den del som spelar roll.

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

En lista utan poster och en lista med rätt poster ser identiska ut i en kataloglistning, och därför är det värt att skriva ut antalet serienummer. Behörighetsraden spelar lika stor roll, eftersom en fil som daemonen inte kan läsa ger ett fel som ser ut som en avvisad klient.

Återställa en post, försiktigt

Att återställa ett certifikat betyder att vända en post i utfärdandedatabasen och publicera en ny lista. easy-rsa 3 håller den databasen som index.txt under PKI-katalogen, medan äldre uppsättningar använde en annan ordning. En rad börjar med en statusbokstav och ett utgångsdatum. En återkallad rad infogar en tidsstämpel för återkallelsen innan den fortsätter med serienumret, certifikatets filnamn och det distingerade namnet. Att sätta tillbaka en rad betyder att ta bort den tidsstämpeln och vända bokstaven, medan allt annat lämnas i fred.

Ta en säkerhetskopia av filen först, och gör ändringen som ett skript i stället för att skriva i en textredigerare. Ett skrivfel som ändrar hur många fält en rad har förstör utfärdandet för varje certifikat som läggs till efteråt. Det är skälet att automatisera ändringen och kopiera filen innan du rör den.

En andra återkallelse av samma namn misslyckas ofta också, eftersom den första körningen flyttade det certifikatet och dess nyckel ut ur de kataloger där verktyget förväntar sig att hitta dem. Verktyget hittar då inte det det blev ombedda att återkalla, och felmeddelandet är inte alltid tydligt om varför.

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

Publicera den nya listan, rätta till dess ägarskap och få servern att läsa den. En omladdning räcker på de flesta installationer, men bekräftelsen måste komma från en färsk anslutning, eftersom den befintliga sessionen aldrig kontrollerade något igen.

Kontrollera vilken spak ärendet förtjänar

Ställ den enda frågan som avgör hela runbooken: är den privata nyckeln fortfarande bara där den ska vara. Om den är det täcker dödandet av sessionen plus en dokumenterad paus ärendet och lämnar ingen permanent post. Om den inte är det är det enda säkra svaret en ny nyckel med det gamla certifikatet kvar som återkallat.

Verifiera sedan resultatet med ett anslutningsförsök i stället för med en konfigurationsskillnad. Skillnaden berättar vad du avsåg, och anslutningen berättar vad servern upprätthåller.

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 återställd klient ansluter och syns i statusutdata fungerade redigeringen av posten. När en återkallad klient avvisas och loggen nämner CRL:en fungerade återkallelsen. Allt däremellan är ett behörighets- eller omladdningsproblem, och det är värt att åtgärda innan nästa begäran kommer.

Relaterade artiklar