OpenSSL genera diversi tipi di certificato autofirmato

14

Qualcuno sa come usare OpenSSL per generare certificati per i seguenti tipi di chiave pubblica:

  1. DSA - Per lo scambio di chiavi DHE_DSS .
  2. Diffie-Hellman - Per DH_DSS e DH_RSA scambio di chiavi.
  3. ECDH - Per ECDH_ECDSA e ECDH_RSA scambio di chiavi.
  4. ECDSA - Per lo scambio di chiavi ECDHE_ECDSA .

La maggior parte di ciò che posso trovare online ti insegna come generare un certificato di tipo RSA.

    
posta Ryu 22.10.2013 - 12:12
fonte

2 risposte

22

(CE) DSA

Per una coppia di chiavi DSA, usa questo:

openssl dsaparam -out dsakey.pem -genkey 1024

dove "1024" è la dimensione in bit. Il primo standard DSA richiedeva che la dimensione fosse un multiplo di 64, nell'intervallo 512..1024. Poi un'altra versione ha dimensioni deprecate inferiori a 1024, quindi una dimensione della chiave DSA valida aveva una lunghezza di 1024 bit e nient'altro. Versione corrente specifica che una chiave DSA valida ha lunghezza 1024, 2048 o 3072 bit . OpenSSL accetta altre lunghezze. Se vuoi massimizzare l'interoperabilità, usa 1024 bit.

Per una coppia di chiavi ECDSA, usa questo:

openssl ecparam -genkey -out eckey.pem -name prime256v1

Per vedere quali nomi di curve sono supportati da OpenSSL, usa: openssl ecparam -list_curves

(Per l'interoperabilità ottimale, attenersi alla curva NIST P-256, che OpenSSL conosce sotto il nome "prime256v1".)

Una volta che hai una coppia di chiavi DSA o ECDSA, puoi generare un certificato autofirmato contenente la chiave pubblica e firmato con la chiave privata:

openssl req -x509 -new -key dsakey.pem -out cert.pem

(Sostituisci "dsakey.pem" con "eckey.pem" per usare la chiave EC generata sopra.)

(CE) DH

Per Diffie-Hellman (con o senza curve ellittiche), le cose sono più complesse, perché DH non è un algoritmo di firma:

  • Non sarai in grado di produrre un certificato autofirmato con un codice DH.
  • Non puoi fare una richiesta PKCS # 10 per un certificato con una chiave DH, perché una richiesta PKCS # 10 dovrebbe essere autofirmata (questa auto-firma è usata come prova di possesso ).

Mentre OpenSSL, la libreria , ha il supporto necessario per rilasciare un certificato che contiene una chiave pubblica DH; questa pagina potrebbe contenere dei puntatori. La sfida è convincere OpenSSL, lo strumento da riga di comando , per farlo. Nella giungla della documentazione di OpenSSL, non ho trovato un modo completo per farlo. Le coppie di chiavi sono abbastanza facili da generare, però.

Per generare una coppia di chiavi DH, con lo strumento da riga di comando OpenSSL, devi farlo in due passaggi:

openssl dhparam -out dhparam.pem 1024
openssl genpkey -paramfile dhparam.pem -out dhkey.pem

Per una coppia di chiavi ECDH, usa questo:

openssl ecparam -out ecparam.pem -name prime256v1
openssl genpkey -paramfile ecparam.pem -out ecdhkey.pem

Tuttavia, accade che il formato per i certificati contenenti le chiavi pubbliche ECDH sia completamente identico al formato dei certificati che contengono le chiavi pubbliche ECDSA; infatti, il formato contiene "una chiave pubblica CE" senza indicazione dell'algoritmo previsto (ECDH o ECDSA). Pertanto, qualsiasi chiave privata e certificati per ECDSA (chiave privata per la generazione di firme ECDSA, certificato autofirmato o firmato da qualsiasi altra CA) saranno adatti per le suite di crittografia ECDH- *.

L'unico caso che non so come produrre con lo strumento da riga di comando di OpenSSL è un certificato Diffie-Hellman (non-EC) statico. Si noti, tuttavia, che OpenSSL non supporta SSL / TLS con suite di crittografia DH statiche, quindi, anche se si potesse produrre il certificato, non funzionerebbe con OpenSSL.

(E, in effetti, nessuno usa la DH statica in pratica.)

    
risposta data 22.10.2013 - 17:53
fonte
6

Sto solo recuperando una vecchia domanda. Recentemente ho avuto bisogno di creare un certificato DH a scopo di test. Così è come si fa. Prima crea i parametri DH e la chiave privata come da risposta di Tom:

openssl dhparam -out dhparam.pem 1024
openssl genpkey -paramfile dhparam.pem -out dhkey.pem

Quindi crea il file della chiave pubblica:

openssl pkey -in dhkey.pem -pubout -out dhpubkey.pem

Ora hai bisogno di un file CSR. I CSR sono autofirmati che ovviamente non possono essere fatti per DH perché DH non è un algoritmo di firma. Ma creane uno comunque per un diverso (uno che può firmare, ad esempio RSA). Per creare una chiave RSA e un CSR associato:

openssl genrsa -out rsakey.pem 1024
openssl req -new -key rsakey.pem -out rsa.csr

Infine, generi il certificato DH dal RSA CSR e la chiave pubblica DH. Non è possibile creare un certificato DH autofirmato perché (come notato sopra) DH non è un algoritmo di firma. Pertanto è necessario aver impostato un certificato / chiave CA. In questo esempio presumo che tu abbia precedentemente creato un CAkey.pem e CAcert.pem:

openssl x509 -req -in rsa.csr -CAkey CAkey.pem -CA CAcert.pem -force_pubkey dhpubkey.pem -out dhcert.pem -CAcreateserial

Il tuo certificato DH sarà in dhcert.pem

    
risposta data 02.03.2015 - 23:55
fonte

Leggi altre domande sui tag