Un certificato per dispositivo non rende la chiave legata al dispositivo
Un certificato per dispositivo è una scelta amministrativa, non un vincolo al dispositivo. A decidere il vincolo è dove vive la chiave privata, da un file copiabile a un TPM.
Emetti un certificato separato per ogni portatile, quindi presumi che la VPN possa distinguerli. Non può. Un certificato client dimostra che chi si connette possiede la chiave privata corrispondente, e un profilo copiato la possiede pure.
Il certificato per dispositivo resta una buona idea. Fa solo un lavoro diverso da quello che la maggior parte delle persone si aspetta.
Cosa dimostra davvero un certificato client
Durante l’handshake il client firma con la chiave privata che corrisponde al suo certificato, e il server verifica quella firma rispetto alla CA di cui si fida. Nulla in quello scambio descrive la macchina. Qualsiasi dispositivo che possieda sia il certificato sia la chiave produce una firma identica, quindi un profilo copiato su un secondo portatile appare esattamente come l’originale. Il certificato nomina un’identità; non nomina l’hardware.
L’unicità per dispositivo vale ancora, perché rende precisa la revoca. È una proprietà amministrativa, non un lucchetto tecnico.
Tre livelli di archiviazione della chiave
Il primo livello è un file di chiave su disco. È portatile per concezione, ed è lì che vivono la maggior parte dei profili OpenVPN.
Il secondo livello è una chiave che il sistema operativo contrassegna come non esportabile. Windows può generare una chiave di dispositivo nel suo archivio certificati e rifiutare l’esportazione ordinaria, il che ferma la copia occasionale. Non è supportata dall’hardware, e con sufficiente accesso alla macchina tali chiavi possono essere recuperate, quindi alza lo sforzo invece di costruire un muro.
Il terzo livello è una chiave generata dentro hardware di sicurezza: un TPM, una smart card, una SIM o un token PIV. Quei moduli non hanno la circuiteria per esportare la chiave che hanno generato, e la firma avviene dentro il modulo. La chiave non diventa mai un file che qualcuno possa copiare.
| Where the key lives | Copyable | What it buys you |
|---|---|---|
| Key file inside the profile | Trivially | Revocation granularity, nothing more |
| OS non-exportable key store | Hard, not impossible | Stops casual profile sharing |
| TPM or PIV token | No | Binding the server can rely on |
Quella tabella è tutto l’argomento in tre righe.
Cosa può e cosa non può fare easy-rsa
Emettere certificati per dispositivo è semplice. Crea un nome comune distinto per ogni dispositivo contro la stessa CA, per esempio ./easyrsa build-client-full laptop-a nopass, e ripeti per ogni dispositivo. Annota quale nome comune appartiene a quale persona e macchina.
La revoca è altrettanto diretta: ./easyrsa revoke laptop-a, rigenera la CRL con ./easyrsa gen-crl, e assicurati che il server la legga davvero tramite crl-verify.
Ciò che la CA non può fare è verificare dove vive la chiave privata in seguito. Se generi la chiave sull’host della CA e la copi sul dispositivo, hai creato una seconda copia al momento dell’emissione. Una chiave non esportabile deve essere generata sul dispositivo, o importata in hardware che non la rilascerà.
Controlli che sopravvivono a un profilo copiato
Presumi che il profilo possa essere copiato e progetta di conseguenza. Lega l’account a un secondo fattore perché un certificato da solo non basti. Dai a ogni dispositivo la sua politica perché la portata di un’identità resti limitata. E tieni d’occhio lo stesso nome comune connesso da due indirizzi insieme, che è l’aspetto di un profilo condiviso in un registro delle connessioni.
Una revoca rapida e documentata è il controllo che funziona ancora dopo che una copia è avvenuta. Tutto il resto è prevenzione.
L’affermazione su cui il server può davvero contare
L’unicità viene dalla CA. Il vincolo al dispositivo viene dall’archiviazione della chiave. Solo un hardware che non può esportare la propria chiave trasforma un certificato per dispositivo in un’affermazione che il server impone, invece che in una politica che tutti accettano di seguire.