Odvolal si certifikát, vygeneroval nový zoznam, a starý profil napriek tomu zostaví tunel. Samotné odvolanie nie je pokazené: CRL je podpísané vyhlásenie, že sériové číslo už nie je platné, a mení prístup až vtedy, keď ho komponent ukončujúci TLS načíta, pre správneho vydavateľa, skôr než urobí rozhodnutie o prijatí. Práve tam leží väčšina týchto prípadov, a preto sú odvolanie a odmietnutie dva rôzne fakty.

Prejdi päť nižšie uvedených kontrol v poradí a zastav sa pri prvej, ktorá neplatí, pretože každá ďalšia predpokladá, že predchádzajúce sú pravdivé.

Skontroluj, ktorý komponent rozhoduje o prijatí

Pomenuj proces, ktorý validuje klientsky certifikát, pretože len ten proces môže vynútiť zoznam. Na serveri OpenVPN je to sám démon, nakonfigurovaný s crl-verify. V ocserv je to riadok crl v ocserv.conf. V strongSwan sú vstupy načítané CRL spolu s strictcrlpolicy. Proxy alebo zariadenie ukončujúce TLS pred VPN môže byť skutočný verifikátor, a ak áno, démon za ním klientsky certifikát nikdy nevidí.

WireGuard patrí do inej kategórie. Nemá certifikáty ani zoznam odvolaní; peer je prijatý na základe svojho verejného kľúča v konfigurácii, takže ukončenie prístupu znamená odstránenie toho kľúča. Ak hľadáš CRL v nasadení len s WireGuardom, ten mechanizmus tam nie je.

Dávaj pozor aj na pascu na strane klienta. Klient, ktorý odmieta pripojenie, pretože mu vadí certifikát servera, vynucuje reťazec servera, neodvoláva vlastné poverenie. Používateľský certifikát sa odvoláva len tam, kde sa tento používateľský certifikát validuje, a to je takmer vždy strana servera.

Skontroluj, pre ktorého vydavateľa bol zoznam podpísaný

CRL je obmedzená na jedno vydávajúce CA. S koreňom a prostredným certifikáty listov pochádzajú z prostredného, takže zoznam, na ktorom záleží, je CRL prostredného; zoznam koreňa o týchto listoch nič nehovorí. Verifikátor nasmerovaný na nesprávny súbor ho veselo naparsuje, nenájde žiadnu zodpovedajúcu položku a prijme všetko.

Potvrď spárovanie, skôr než sa dotkneš démona. Vydavateľ na certifikáte musí zodpovedať subjectu zoznamu:

openssl x509 -in client.crt -noout -issuer -serial
openssl crl  -in intermediate.crl -noout -issuer -lastupdate -nextupdate

Keď oba pochádzajú z rovnakého CA, sériové číslo vytlačené pre certifikát je hodnota, ktorá sa musí objaviť v zozname. Ak sa nezhodujú, držíš nesprávnu CRL alebo jej nesprávnu kópiu.

Platnosť patrí k tej istej kontrole. nextUpdate v minulosti robí zoznam zastaraným, a verifikátor, ktorý zlyháva zavreté, potom odmietne každého klienta namiesto len odvolaného.

Skontroluj, že sériové číslo je v kópii, ktorú démon načítal

Odvolanie zapisuje položku do databázy CA a opätovné vygenerovanie zapisuje nový súbor. Ani jedna akcia sa nedostane k bežiacemu démonovi, ktorý pri štarte načítal starú kópiu. Vypíš zoznam a hľadaj sériové číslo:

openssl crl -in intermediate.crl -noout -text | grep -i -A2 'Serial Number'
openssl ca -revoke client.crt
openssl ca -gencrl -out intermediate.crl

Potom skontroluj, ako tvoja implementácia súbor preberá. OpenVPN číta cestu odovzdanú crl-verify raz pri štarte, takže nový zoznam vyžaduje reštart alebo signál reštartu; tá istá voľba namierená na adresár sa znovu načítava pri každom pripojení, a preto existuje adresárový režim. strongSwan musí znovu načítať svoje poverenia, napríklad pomocou swanctl --load-creds. To, že je súbor na disku správny, a to, že ho verifikátor používa, sú dva rôzne fakty.

Skontroluj politiku pre chýbajúci alebo expirovaný zoznam

Toto je rozhodnutie, ktoré mnohé nasadenia nikdy neurobia výslovne, a určuje, či ťa odvolanie chráni, alebo všetkých uzamkne vonku. Fail-closed znamená, že žiadna použiteľná informácia o odvolaní nevedie k odmietnutiu; fail-open znamená, že verifikátor pokračuje bez nej. strongSwan vystavuje voľbu ako strictcrlpolicy. OpenVPN s crl-verify odmieta naštartovať na súbore, ktorý nedokáže prečítať alebo naparsovať, a expirovaný zoznam sa prejaví ako chyba overenia TLS týkajúca sa expirovanej CRL, nie ako tiché prijatie.

State of the revocation dataFail-closed resultFail-open result
List missing or unreadableVerification fails, so expect an outageEvery client connects, including the revoked one
List past nextUpdateValidation errors until a fresh list is deployedOld status is trusted indefinitely
Revoked serial present in the loaded listHandshake rejected for that certificateHandshake rejected for that certificate

Nech zvolíš ktorýkoľvek smer, automatizácia je dôležitejšia ako voľba: úloha, ktorá regeneruje CRL pred nextUpdate, a upozornenie, keď nasadená kópia zostarne, bránia obom politikám stať sa incidentom. Online kontrola cez OCSP presúva čerstvosť na respondér, ale platí rovnaké pravidlo, pretože verifikátor nenastavený na kontrolu odpovede nič nemení.

Skontroluj aktívnu reláciu, potom kópie kľúča

Odvolanie sa vyhodnocuje počas validácie certifikátu, ktorá prebieha pri pripojení a pri renegociácii. Nadviazaná relácia beží ďalej, kým znova nevyjedná, a predvolená hodnota OpenVPN je raz za hodinu s reneg-sec 3600. Ak musí osoba okamžite zmiznúť zo siete, ukonči reláciu popri zverejnení zoznamu, a potom potvrď, že opätovné pripojenie je odmietnuté.

Oddel poverenie od jeho kópií. Zmazanie profilu na jednom notebooku nezabráni inej kópii toho istého súkromného kľúča v autentifikácii; odvolanie je to, čo urobí každú kópiu nepoužiteľnou, a len keď predchádzajúce kontroly platia. Daj náhradnému zariadeniu vlastný certifikát, aby sa dalo jedno odvolať bez zásahu do druhého.

Než to označíš za hotové: validačný komponent je určený, vydavateľ zoznamu zodpovedá vydavateľovi listu, odvolané sériové číslo je v kópii, ktorú démon skutočne načítal, politika pre chýbajúce alebo expirované zoznamy je zámerná a monitorovaná, a aktívna relácia bola ukončená, namiesto aby sa na ňu čakalo. Formáty, ktoré za tým všetkým stoja, určuje RFC 5280.

Súvisiace články