Sfondo
Seguendo le guide qui e qui Sto impostando su un PKI multi-livello. Ho aumentato il pathlen config a 3, in modo da poter generare un certificato radice che posso usare per firmare il primo intermedio e archiviarlo in modo sicuro. Il primo intermedio verrà memorizzato sulla workstation di configurazione e utilizzato per generare secondi intermedi, che verranno utilizzati per generare i certificati finali effettivamente utilizzati per le comunicazioni all'interno di un cluster remoto.
/ Background
In questo esperimento ho scoperto che se riducevo il valore pathlen usato per generare la CA, anche a 0, allora in un comando come questo:
openssl verify -CAfile <root ca> -untrusted <chain of intermediates> \
<cert to verify>
il certificato è ancora validato come OK.
Dopo aver posto una domanda su questo qui Ho anche impostato una catena di trust simile usando openssl (1 CA, 2 CA intermedie, 1 certificato server) e assegnato il pathlen" 1 "alla CA e il pathlen" 0 "a entrambi i prodotti intermedi ( un intermedio è stato firmato dall'altro). openssl verify
ha ancora detto che era OK.
Mi sarei aspettato che la Max Path Length della CA rendesse invalidi i certificati foglia in entrambi i casi, è sbagliato?
Aggiornamento: risultato (si spera di illustrare la comprensione che ho acquisito)
Si è scoperto che quando stavo verificando la catena che ho configurato tramite openssl, stavo verificando il secondo certificato di fiducia subordinato, piuttosto che il certificato del server (foglia). Quando ho impostato una catena dei due subordinati per passare al flag -untrusted
e verificato il certificato del server, openssl (correttamente) lo respinge come non valido.
Ciò significa che il numero minimo di trust per un certificato valido in cui viene applicato un vincolo pathlen è 2 - la CA radice (autofirmata), dove viene ignorato qualsiasi valore pathlen e un certificato intermedio (che può avere un pathlen valore di 0 al minimo). Si noti che anche se il pathlen è 0, un intermedio valido può ancora firmare un certificato valido, poiché il vincolo pathlen si applica solo al numero di nodi nella catena di attendibilità del certificato, non al certificato stesso.
L'autore degli articoli che stavo usando come informazioni sorgente su questo ha torto. Inoltre, il modo in cui cfssl al momento della scrittura viene impostato per accettare un valore pathlen solo per un valore CA autofirmato (non per qualsiasi CA subordinata) lo rende ancora più opaco e probabilmente causa la confusione dell'autore.
In retrospettiva, ha senso che un valore pathlen non debba essere applicato a una CA radice, poiché in ultima analisi la CA è attendibile (o dovrebbe essere valida per tutti i certificati firmati). È responsabile dell'autorizzazione a mantenere la chiave CA radice per firmare qualsiasi CSR che richiede o meno lo stato della CA (compreso il controllo del valore pathlen), a seconda della relativa politica.