(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.)