Firma il CRT esistente

1

Questa è la mia unica linea per generare certificati autofirmati

openssl req -x509 -out localhost.crt -keyout localhost.key \
  -newkey rsa:2048 -nodes -sha256 \
  -subj '/CN=example.com' -extensions EXT -config <( \
   printf "[dn]\nCN=example.com\n[req]\ndistinguished_name = dn\n[EXT]\nsubjectAltName=DNS:example.com\nkeyUsage=digitalSignature\nextendedKeyUsage=serverAuth")

Ora voglio firmare i certificati precedenti con la mia CA, quindi emetto questo:

openssl genrsa -des3 -out rootCA.key 4096
openssl req -x509 -new -nodes -key rootCA.key -sha256 -days 1024 -out rootCA.crt

Come posso firmare con la mia CA un CRT esistente?

    
posta SystematicFrank 06.04.2018 - 17:05
fonte

2 risposte

1

How can I sign with my CA an existing CRT ?

È possibile solo firmare una richiesta di certificato ma non un certificato. Ma è possibile creare una richiesta di certificato da un certificato esistente e quindi firmare questa richiesta di certificato. Vedi Genera CSR dal certificato esistente .

    
risposta data 06.04.2018 - 17:44
fonte
1

Anche se questa è una cosa insolita da fare, la linea di comando OpenSSL, che include molte funzionalità rivolte principalmente ai problemi di debug, può farlo. Usa openssl x509 ( senza -req ) con -CA certfile -CAkey keyfile o solo -CA file se hai sia cert che privatekey in un file (che PEM può fare). Aggiungi -digestname , ad es. -sha256 se diverso da quello predefinito (SHA1). Puoi specificare il nuovo serial esplicitamente con -set_serial , o usare quasi lo stesso schema di file seriale di openssl ca per default o esplicitamente; vedi man [1ssl?] x509 sul tuo sistema (a meno che non sia Windows) o sul web alla voce 'Opzioni di firma' a circa 1/3 della via verso il basso. (La differenza è che ca usa il valore esadecimale dal file dopo incremento, ma x509 [-req] -CA* lo usa prima . Il mapping seriale / cert NON è registrato in un file "database", come ca .) È possibile specificare la durata del periodo di validità, ma non specificare i tempi di inizio e fine arbitrari come ca possibile.

Sostituisce il nome dell'emittente, seriale, periodo di validità e firma, nel nuovo certificato (di uscita), ma non cambia nessuna delle estensioni, che per il tuo caso sembra corretta. Se il certificato di input contiene l'estensione AuthorityKeyIdentifier (AKI) per identificare il suo certificato padre / 'firma', quell'estensione nel certificato di output non identificherà correttamente il suo genitore che potrebbe causare problemi nell'utilizzo del certificato. Puoi sostituire le estensioni aggiungendo -clrext -extfile filename -extensions section , ma devi fare tutti di esse, il che potrebbe essere scomodo.

Se si utilizza il processo in due passaggi di x509 -x509toreq per creare un CSR e quindi x509 -req -CA* o ca per emettere un certificato da quel CSR, questo elimina tutte le estensioni dal certificato di input. Se vuoi delle estensioni devi aggiungerle di nuovo: per x509 -req -CA* questo deve essere esplicito sulla riga di comando; per ca può essere configurato nel file di configurazione o sovrascritto sulla riga di comando.

ObRant: l'emissione di un certificato è spesso descritta come "firma del CSR / richiesta". Non è. Il corpo del certificato, alias certTBS (TBS = to-be-signed), si basa normalmente parzialmente su parte del CSR, ma la maggior parte del corpo del certificato è diversa dalla CSR.

    
risposta data 07.04.2018 - 09:38
fonte

Leggi altre domande sui tag