Opozvani VPN certifikat još se povezuje? Provjeri provedbu CRL-a
Opozvanim certifikatima i dalje uspijeva spajanje kad CRL nikad ne stigne do verifikatora. Provjeri ovim redom izdavatelja, učitani serijski broj, ponašanje pri ponovnom učitavanju i aktivne sesije.
Opovrgnuo si certifikat, generirao novi popis, a stari profil i dalje podiže tunel. Sama revokacija nije pokvarena: CRL je potpisana izjava da serijski broj više nije valjan, i mijenja pristup tek kad ga komponenta koja zaključuje TLS učita, za pravilnog izdavatelja, prije nego donese odluku o prihvatu. Tu leži većina takvih slučajeva, i zato su revokacija i odbijanje dvije različite činjenice.
Prođi kroz pet provjera u nastavku redom i zaustavi se na prvoj koja ne vrijedi, jer svaka kasnija pretpostavlja da su prethodne istinite.
Provjeri koja komponenta donosi odluku o prihvatu
Imenuj proces koji validira klijentski certifikat, jer samo taj proces može provesti popis. Na poslužitelju OpenVPN to je sam daemon, konfiguriran s crl-verify. U ocservu to je redak crl u ocserv.conf. U strongSwamu ulazi su učitani CRL-ovi zajedno s strictcrlpolicy. Proxy ili uređaj koji zaključuje TLS ispred VPN-a može biti stvarni verifikator, a ako jest, daemon iza njega nikad ne vidi klijentski certifikat.
WireGuard pripada drugoj kategoriji. Nema certifikate ni popis opoziva; peer se prima preko svog javnog ključa u konfiguraciji, pa prekid pristupa znači uklanjanje tog ključa. Ako tražiš CRL u instalaciji samo s WireGuardom, tog mehanizma tamo nema.
Pazi i na zamku na strani klijenta. Klijent koji odbija vezu jer mu se ne sviđa poslužiteljev certifikat provodi poslužiteljev lanac, ne opoziva vlastite vjerodajnice. Korisnički certifikat opoziva se samo tamo gdje se taj korisnički certifikat validira, a to je gotovo uvijek strana poslužitelja.
Provjeri za kojeg je izdavatelja popis potpisan
CRL je ograničen na jedno izdavateljsko CA. Uz korijen i posredničko CA, listovi dolaze od posredničkog, pa je popis koji je bitan CRL posredničkog; popis korijena ne govori ništa o tim listovima. Verifikator usmjeren na pogrešnu datoteku veselo je parsira, ne nalazi odgovarajući unos i prihvaća sve.
Potvrdi uparivanje prije nego dotakneš daemon. Izdavatelj na certifikatu mora odgovarati subjectu popisa:
openssl x509 -in client.crt -noout -issuer -serial
openssl crl -in intermediate.crl -noout -issuer -lastupdate -nextupdateKad oba dolaze iz istog CA, serijski broj ispisan za certifikat vrijednost je koja se mora pojaviti na popisu. Ako se ne slažu, držiš pogrešan CRL ili pogrešnu kopiju.
Valjanost pripada istoj provjeri. nextUpdate u prošlosti čini popis zastarjelim, a verifikator koji zataji zatvoreno odbit će tada svakog klijenta umjesto samo opozvanog.
Provjeri je li serijski broj u kopiji koju je daemon učitao
Revokacija upisuje unos u bazu CA, a ponovno generiranje upisuje novu datoteku. Nijedna radnja ne stiže do daemona koji radi i koji je pri pokretanju učitao staru kopiju. Ispiši popis i potraži serijski broj:
openssl crl -in intermediate.crl -noout -text | grep -i -A2 'Serial Number'
openssl ca -revoke client.crt
openssl ca -gencrl -out intermediate.crlZatim provjeri kako tvoja implementacija preuzima datoteku. OpenVPN čita putanju zadanu crl-verify jednom pri pokretanju, pa novi popis zahtijeva ponovno pokretanje ili signal za ponovno pokretanje; ista opcija usmjerena na mapu ponovno se čita pri svakoj vezi, i zato postoji način rada s mapom. strongSwan mora ponovno učitati svoje vjerodajnice, na primjer s swanctl --load-creds. Da je datoteka na disku ispravna i da je verifikator koristi dvije su različite činjenice.
Provjeri politiku za popis koji nedostaje ili je istekao
To je odluka koju mnoge instalacije nikad ne donesu izričito, i ona odlučuje štiti li te revokacija ili zaključava sve van. Fail-closed znači da bez upotrebljive informacije o opozivu nastupa odbijanje; fail-open znači da verifikator nastavlja bez nje. strongSwan izlaže izbor kao strictcrlpolicy. OpenVPN s crl-verify odbija se pokrenuti na datoteci koju ne može pročitati ili parsirati, a istekli popis pojavljuje se kao TLS pogreška provjere o isteklom CRL-u umjesto kao tiho prihvaćanje.
| State of the revocation data | Fail-closed result | Fail-open result |
|---|---|---|
| List missing or unreadable | Verification fails, so expect an outage | Every client connects, including the revoked one |
List past nextUpdate | Validation errors until a fresh list is deployed | Old status is trusted indefinitely |
| Revoked serial present in the loaded list | Handshake rejected for that certificate | Handshake rejected for that certificate |
Koju god stranu odabrao, automatizacija je važnija od izbora: posao koji regenerira CRL prije nextUpdate i upozorenje kad implementirana kopija ostari sprječavaju da bilo koja politika postane incident. Online provjera s OCSP-om premješta svježinu na respondera, ali vrijedi isto pravilo, jer verifikator koji nije konfiguriran za provjeru odgovora ne mijenja ništa.
Provjeri aktivnu sesiju, pa kopije ključa
Revokacija se ocjenjuje tijekom validacije certifikata, koja se događa pri spajanju i pri ponovnom pregovaranju. Uspostavljena sesija nastavlja raditi dok ne pregovara ponovno, a zadana vrijednost OpenVPN-a je jednom na sat s reneg-sec 3600. Ako osoba mora odmah izvan mreže, prekini sesiju uz objavu popisa, pa zatim potvrdi da je ponovno spajanje odbijeno.
Odvoji vjerodajnicu od njezinih kopija. Brisanje profila na jednom prijenosniku ne sprječava drugu kopiju istog privatnog ključa da se autentificira; revokacija je ono što svaku kopiju čini beskorisnom, i to tek kad prethodne provjere vrijede. Daj zamjenskom uređaju vlastiti certifikat da se jedno može opozvati bez diranja drugoga.
Prije nego to proglasiš završenim: validacijska komponenta je identificirana, izdavatelj popisa odgovara izdavatelju lista, opozvani serijski broj nalazi se u kopiji koju je daemon stvarno učitao, politika za popise koji nedostaju ili su istekli svjesna je i nadzirana, a aktivna sesija prekinuta je umjesto čekanja. Formate koji stoje za svim tim određuje RFC 5280.