Come creare la mia propria catena di certificati?

Vorrei installare il mio OPSP Responder (solo per scopi di test). Questo richiede di avere un certificato di root e alcuni certificati generati da esso.

Sono riuscito a creare un certificato auto-firmato utilizzando openssl. Voglio utilizzarlo come certificato di origine. Il prossimo passo sarebbe quello di creare i certificati derivati. Non riesco a trovare la documentazione su come farlo comunque. Qualcuno sa where posso trovare queste informazioni?

Modifica
In retrospettiva, la mia domanda non è ancora completamente risolta. Per chiarire il problema rappresenterò la mia catena certificata come questa:

ROOT -> A -> B -> C -> …

Attualmente sono in grado di creare i certificati ROOT e A, ma non ho scoperto come creare una catena più lunga.

Il mio command per la creazione del certificato di root è:

openssl req -new -newkey rsa:1024 -nodes -out ca.csr -keyout ca.key openssl x509 -trustout -signkey ca.key -days 365 -req -in ca.csr -out ca.pem 

Il certificato A viene creato così:

 openssl genrsa -out client.key 1024 openssl req -new -key client.key -out client.csr openssl ca -in client.csr -out client.cer 

Questo command implicitamente dipende dal certificato di root, per il quale trova le informazioni necessarie nel file di configuration openssl.

Il certificato B deve tuttavia contare solo su A che non è registrato nel file di configuration, quindi il command precedente non funziona qui.

Quale linea di command devo utilizzare per creare certificati B e oltre?

Modifica
Ho trovato la risposta in questo articolo . Il certificato B (catena A -> B) può essere creato con questi due comandi:

 # Create a certificate request openssl req -new -keyout B.key -out B.request -days 365 # Create and sign the certificate openssl ca -policy policy_anything -keyfile A.key -cert A.pem -out B.pem -infiles B.request 

Ho anche cambiato il file openssl.cnf:

 [ usr_cert ] basicConstraints=CA:TRUE # prev value was FALSE 

Questo approccio sembra funzionare bene.

È ansible utilizzare direttamente OpenSSL.

  1. Creare una chiave privata dell'autorità di certificazione (questa è la chiave più importnte):

     openssl req -new -newkey rsa:1024 -nodes -out ca.csr -keyout ca.key 
  2. Crea il tuo certificato autofirmato CA:

     openssl x509 -trustout -signkey ca.key -days 365 -req -in ca.csr -out ca.pem 
  3. Emettere un certificato client generando la chiave prima, quindi richiedendo (o usando uno fornito da un sistema esterno), quindi firmare il certificato utilizzando la chiave privata della propria CA:

     openssl genrsa -out client.key 1024 openssl req -new -key client.key -out client.csr openssl ca -in client.csr -out client.cer 

(Potrebbe essere necessario aggiungere alcune opzioni mentre utilizzi questi comandi insieme al mio file openssl.conf. Potrebbe essere necessario impostare prima il tuo file .conf.)

Una volta creata la tua CA, potrai utilizzarla per firmare così:

  • Crea una chiave:

     openssl genrsa -out key_A.key 1024 
  • Crea un csr:

     openssl req -new -key key_A.key -out csr_A.csr You are about to be asked to enter information etc.... 
  • Firma:

     openssl x509 -req -days 365 -in csr_A.csr -CA CA_certificate_you_created.crt \ -CAkey CA_key_you_created.key -set_serial 01 -out crt_A.crt 

    e così via sostituendo * _A con * _B e CA_certificate_you_created.crt con crt_A.crt e CA_key_you_created.key con key_A.key

Il tuo cambio:

 basicConstraints=CA:TRUE # prev value was FALSE 

significa che i certificati rilasciati possono essere utilizzati per firmare altri certificati.

OpenSSL è dotato di uno script perl "CA.pl" che ti aiuterà a creare un certificato CA radice autenticato, insieme alla chiave privata corrispondente, oltre a pochi file e directory semplici per aiutare a tenere traccia di eventuali cert di futuro firmati (aka issue ) con quella CA principale. Inoltre ti aiuta a generare altre coppie chiave e richieste di firma dei certificati (CSR) e aiuta a elaborare tali CSR (ovvero emettere i cert per loro) e altro ancora.

Si noti che molti prodotti richiedono che i certs CA contengano un certo attributo che li contrassegna come CA certs o non saranno accettati come firmatari / emittenti validi di altri cert. Se il certificato auto-firmato creato non contiene tale attributo, potrebbe essere difficile get un altro software per trattarlo come un certificato di CA principale valido.

Se mi ricordo correttamente, la syntax va in questo modo:

 CA.pl -newca # Create a new root CA CA.pl -newreq # Create a new CSR CA.pl -sign # Sign a CSR, creating a cert CA.pl -pkcs12 # Turn an issued cert, plus its matching private key and trust chain, into a .p12 file you can install on another machine