La revoca non entra mai in un tunnel in corso per eliminare una sessione. La lista è un input della verifica del certificato e viene consultata durante lo scambio del canale di controllo che apre una sessione TLS. Questo unico fatto spiega le due sorprese: un client revocato si riconnette perché la lista non è mai arrivata al verificatore, e una sessione esistente sopravvive perché nessuno ha verificato di nuovo nulla.

Una lista è un input, non un’azione

Durante l’instaurazione della sessione il server convalida il certificato del client rispetto alle sue àncore di fiducia, e la direttiva di revoca aggiunge a quella decisione una consultazione della lista. Il controllo avviene sul server, quindi il client non può vedere che il suo certificato è stato revocato e continua a proporre lo stesso. Un profilo che si connette ancora dimostra quindi solo che un verificatore ha accettato la catena, non che la revoca abbia fallito.

La lista è essa stessa un oggetto firmato con una data di emissione e una data di prossimo aggiornamento. Una lista estranea, una firmata da un’altra autorità o una il cui prossimo aggiornamento è passato non sostituiscono quella corrente, e il rifiuto o l’accettazione silenziosa di una lista scaduta dipende dalla distribuzione.

Nuova connessione contro sessione in corso

La revoca viene valutata quando una sessione viene stabilita o rinegoziata, non contro il canale dati a ogni pacchetto. Un client già connesso possiede chiavi di traffico, quindi continua a lasciar passare i pacchetti dopo che il suo certificato appare sulla lista. L’intervallo di rinegoziazione predefinito si misura in ore, ed è per questo che una lista aggiornata può valere per i nuovi arrivati mentre un tunnel in corso resta attivo.

SituationWhat the list doesWhen it applies
Fresh connectionBlocks the handshakeAt verification, immediately
RenegotiationBlocks the new exchangeAt the next renegotiation interval
Established data channelNothingUntil the session ends

Un’applicazione immediata richiede un’azione deliberata e non la sola lista. Riavviare il servizio obbliga ogni client a riconnettersi, mentre terminare una sola sessione dall’interfaccia di gestione lascia intatte le altre. Sceglietene una per incidente e annotate quale avete usato. Le due opzioni hanno un raggio d’impatto diverso, e questa è la decisione vera.

Consegnate il file che il verificatore legge davvero

La lista deve essere generata dal registro dell’autorità e poi copiata su ogni macchina che verifica certificati. Generarla sull’host della CA senza mai installarla sul server è il guasto più comune, e sembra esattamente una funzione di revoca rotta.

ca ca.crt
cert server.crt
key server.key
crl-verify /etc/openvpn/crl.pem

Due dettagli decidono se il file viene davvero letto. Un percorso relativo viene risolto rispetto alla directory di configurazione, quindi una copia lasciata nella home di un operatore può non essere mai trovata. E il demone di solito rinuncia ai privilegi dopo l’avvio, quindi l’account di esecuzione ha bisogno del permesso di ricerca su ogni directory padre e del permesso di lettura sul file. Verificate entrambi con l’account di esecuzione e non con root, altrimenti il test dimostra la cosa sbagliata.

Sugli host systemd un’unità indurita può nascondere il percorso, con una vista in sola lettura o una directory di sistema protetta. Dall’interno del servizio ciò è indistinguibile da un file mancante, quindi controllate le restrizioni dell’unità prima di andare a cercare un errore di permessi. Leggete il file dell’unità prima di dare la colpa alla modalità del file.

Confermate sul server, non sul client

Il registro del server nomina che cosa è successo: apertura della lista, caricamento o verifica fallita con il numero di serie revocato. Il client riporta solo un errore generico di stretta di mano, per questo i log del client sono un cattivo posto dove cercare una decisione di revoca.

Verificate con un tentativo nuovo dal profilo revocato e poi fermatevi. Una connessione riuscita da quel profilo è il segnale per ispezionare il percorso del file e l’account di esecuzione, non per supporre che la lista fosse sbagliata. Conservate quel tentativo riuscito come test di accettazione, e non contate una riconnessione che non avete osservato.

Ciò che non revoca nulla

Eliminare il profilo da un portatile, rimuovere il file del certificato dal client o dire all’utente di smettere di connettersi non cambia nulla sul server. Il certificato resta valido finché l’autorità registra la revoca e il verificatore legge la lista risultante.

Ecco perché vale la pena scrivere la catena: registrate la revoca, generate e firmate la lista, distribuite esattamente quel file e confermate che l’account del servizio può leggerlo. Ogni anello è breve, e uno solo mancante lascia un client revocato che si connette allegramente. Una lista di controllo di quattro righe batte un’ipotesi che non ne ha nessuna.

Articoli correlati