Come posso utilizzare la firma incrociata X.509 per sostituire una CA?

3

Ho una CA autofirmata per la quale voglio ruotare la chiave. Voglio usare cross-sign per facilitare questo, con la sostituzione graduale del certificato sui client in modo che possano ancora comunicare.

Sto utilizzando cfssl , ma non riesco a capire in pratica come farlo funzionare. A scopo di test, ho generato due nuove CA con CN identici e con firma incrociata:

cfssl gencert -initca ca-csr-A.json | cfssljson -bare ca-A
cfssl gencert -initca ca-csr-B.json | cfssljson -bare ca-B

cfssl sign -ca ca-A.pem -ca-key ca-A-key.pem -config ca-config.json ca-B.csr | cfssljson -bare ca-B-by-A
cfssl sign -ca ca-B.pem -ca-key ca-B-key.pem -config ca-config.json ca-A.csr | cfssljson -bare ca-A-by-B

Ho quindi creato un nuovo certificato client, firmato con la chiave privata di A e il certificato A firmato da B:

cfssl gencert -ca=ca-A-by-B.pem -ca-key=ca-A-key.pem -config=ca-config.json child-csr.json | cfssljson -bare child

Ho quindi provato a verificare (utilizzando openssl verify ) il nuovo certificato client con l'originale A, l'originale B o entrambe le CA con firma incrociata, ma non riesco a elaborare l'incantesimo. Ho provato a raggruppare ca-A-by-B.pem e ca-B.pem , e ho provato a raggruppare il cliente con ca-A-by-B.pem come intermediario, ma non funzionano neanche.

Penso di aver perso qualcosa di ovvio, o semplicemente di fraintendere completamente il cross-signing. È persino possibile?

    
posta boffbowsh 08.12.2018 - 18:27
fonte

1 risposta

0

Queste risposte potrebbero essere utili:

Bene, quindi l'idea sarebbe quella di posizionare i certificati incrociati negli archivi fiduciari dei tuoi clienti in modo che durante la convalida del certificato possano creare percorsi dalla CA che non si fidano di quello che fanno.

Il tuo scenario di prova è che hai un certificato entità finale emesso da ca-A e un verificatore client che si affida solo a ca-B . Hai anche un cross-cert ca-A-by-B che puoi dare al client in modo che possa creare percorsi tra le due CA. Credo che l'incantesimo da linea di comando openssl corretto simuli quello che sarebbe:

  • -CAfile ca-B.pem in modo che ca-B sia "nel trust store".
  • -untrusted ca-A-by-B.pem in modo che il verificatore sappia che può utilizzare quel certificato per la creazione del percorso, ma non lo considera una radice attendibile.
  • < (cat ca-A.pem child.pem) simula la ricezione di un cert-bundle contenente il certificato di entità finale e il suo emittente (ca-A).

tutti insieme:

openssl verify -verbose -CAfile ca-B.pem -untrusted ca-A-by-B.pem < (cat ca-A.pem child.pem)

Non ho provato questa causa Sono troppo pigro per generare test, ma fammi sapere se aiuta (o se devo apportare correzioni).

    
risposta data 09.12.2018 - 02:37
fonte