Riemettere un certificato per laptop con lo stesso nome comune sembra una sostituzione, e tutti danno per scontato che il vecchio sia morto. Non lo è. Il predecessore resta un certificato valido firmato dalla stessa autorità, e qualsiasi controllo che ammette client per nome continuerà ad ammetterlo. Ciò che separa un controllo di identità da un controllo di credenziali è il numero di serie, ed è lì che va la correzione.

Iniziate dalla politica di denominazione usata dal server

Due controlli vengono confusi: ammettere un client per chi dichiara di essere, e rimuovere dal servizio un certificato specifico. Il primo è un controllo del nome, il secondo un controllo di revoca. Rispondono a domande diverse, e un’installazione può avere l’uno senza l’altro.

Leggete la configurazione del server e annotate quale fonte di identità è in gioco. username-as-common-name rende il nome utente autenticato il nome effettivo per le ricerche specifiche del client. Senza di esso, si usa il nome comune del soggetto dal certificato. Qualunque sia la risposta, annotatela prima di toccare qualsiasi elenco consentito.

I due percorsi producono un insieme diverso di nomi consentiti per lo stesso certificato. Indovinare qui significa modificare il file sbagliato e concludere che il controllo non funziona.

Verificate cosa ammette davvero un client

Un client-config-dir con un file corrispondente fornisce opzioni per client; da solo non è una regola di ammissione. L’ammissione per nome richiede ccd-exclusive, che rifiuta i client che non hanno un file corrispondente. Abilitarlo su un’installazione attiva disconnette tutti quelli il cui nome non ha un file, quindi contate i file prima di cambiare qualsiasi cosa.

grep -nE 'ccd-exclusive|client-config-dir|username-as-common-name' /etc/openvpn/server/server.conf
ls -1 /etc/openvpn/ccd/

Il conteggio è il controllo: confrontate l’elenco della directory con le identità che vi aspettate.

Poi confermate che ogni nome di file corrisponda esattamente all’identità effettiva, comprese maiuscole e minuscole e spazi. Un file per office-laptop non fa nulla per un certificato il cui soggetto dice Office-Laptop. Gli spazi finali si nascondono anche da un elenco semplice, ed è così che un file che sembra presente resta non letto.

Verificate la CRL caricata dal gateway

Una CRL nomina i certificati revocati per emittente e numero di serie, che è la granularità che manca a un controllo del nome. Due certificati possono condividere un nome comune e differire nel numero di serie, e solo un elenco a livello di numero di serie li separa.

Confermate il percorso configurato, la data di emissione e il campo del prossimo aggiornamento prima di fidarvi del file.

openssl crl -in /etc/openvpn/crl.pem -noout -lastupdate -nextupdate
openssl x509 -in office-laptop.crt -noout -serial -subject

Confrontate il numero di serie nella CRL con il numero di serie del certificato che intendete conservare. Quel confronto è l’intera prova, e farlo una volta a occhio vale più che fidarsi di uno script che nessuno ha letto. Distribuite la CRL aggiornata tramite il percorso che il gateway già legge. Una CRL nella directory sbagliata non impone nulla, e nessun log client lo menzionerà.

Sostituite, poi dimostrate entrambi gli esiti

Emettere la sostituzione con lo stesso nome comune, registrate entrambi i numeri di serie, e solo allora revocate il vecchio. Quest’ordine mantiene disponibile un’identità funzionante mentre preparate la modifica.

Provate prima la sostituzione: dovrebbe autenticarsi e raggiungere tutto ciò a cui il suo nome ha diritto. Poi provate il certificato vecchio e confermate che viene rifiutato, perché una sostituzione riuscita non dice nulla sulla revoca. Se entrambi si connettono ancora, l’input di revoca non viene letto o il vecchio numero di serie non è mai stato elencato. Se nessuno dei due si connette, avete rotto la regola di ammissione, non la credenziale.

Le sessioni già stabilite sono un’altra questione, poiché la revoca si applica alle nuove autenticazioni a meno che il gateway non sia configurato anche per interrompere le connessioni attive. Decidete se è necessaria la rimozione immediata prima di prometterla a qualcuno.

Ciò che un controllo del nome non può mai fare

Un elenco consentito risponde se questa identità può connettersi. Non può dire quale certificato abbia usato quell’identità, e ammetterà una credenziale più vecchia finché la credenziale resta valida e non revocata. Quel vuoto emerge durante un incidente, quando la sostituzione è stata emessa mesi fa e il predecessore funziona ancora.

Dove serve un controllo a livello di certificato, usate un meccanismo che nomini il certificato: voci di CRL, o un hook di verifica che controlli un’impronta mantenuta dall’operatore. Entrambi costano manutenzione, ed entrambi sono onesti riguardo all’oggetto che esaminano. Il manuale di OpenVPN 2.6 documenta crl-verify e l’ammissione specifica del client come opzioni separate per questo motivo.

Annotate quale controllo fa quale lavoro, poi provate il caso negativo. Una revoca che non avete mai visto rifiutare una connessione è una configurazione che sperate funzioni.

Articoli correlati