DSA (CE)
Para un par de claves DSA, use esto:
openssl dsaparam -genkey 1024 -out dsakey.pem
donde "1024" es el tamaño en bits. El primer estándar DSA exigía que el tamaño tuviera que ser un múltiplo de 64, en el rango 512..1024. Luego, otra versión quedó en desuso por debajo de 1024, por lo que un tamaño de clave DSA válido tenía una longitud de 1024 bits y nada más. Versión actual especifica que una clave DSA válida tiene una longitud de 1024, 2048 o 3072 bits . OpenSSL acepta otras longitudes. Si desea maximizar la interoperabilidad, use 1024 bits.
Para un par de claves ECDSA, use esto:
openssl ecparam -genkey -out eckey.pem -name prime256v1
Para ver qué nombres de curvas son compatibles con OpenSSL, use: openssl ecparam -list_curves
(Para una interoperabilidad óptima, apéguese a la curva NIST P-256, que OpenSSL conoce bajo el nombre "prime256v1".)
Una vez que tenga un par de claves DSA o ECDSA, puede generar un certificado autofirmado que contenga la clave pública y firmado con la clave privada:
openssl req -x509 -new -key dsakey.pem -out cert.pem
(Reemplace "dsakey.pem" por "eckey.pem" para usar la clave EC generada anteriormente.)
(EC) DH
Para Diffie-Hellman (con o sin curvas elípticas), las cosas son más complejas, porque DH no es un algoritmo de firma:
- No podrá presentar un certificado autofirmado con una clave DH.
- Tampoco puede realizar una solicitud PKCS # 10 para un certificado con una clave DH, ya que se supone que una solicitud PKCS # 10 es autofirmada (esta autofirma se usa como una prueba de posesión ).
Si bien OpenSSL, la biblioteca , tiene el soporte necesario para emitir un certificado que contiene una clave pública DH; esta página puede contener punteros. El desafío es convencer a OpenSSL, la herramienta de línea de comandos , para que lo haga. En la jungla de la documentación de OpenSSL, no he encontrado una forma completa de hacerlo. Sin embargo, los pares de claves son bastante fáciles de generar.
Para generar un par de claves DH, con la herramienta de línea de comandos OpenSSL, debe hacerlo en dos pasos:
openssl dhparam -out dhparam.pem 1024
openssl genpkey -paramfile dhparam.pem -out dhkey.pem
Para un par de claves ECDH, use esto:
openssl ecparam -out ecparam.pem -name prime256v1
openssl genpkey -paramfile ecparam.pem -out ecdhkey.pem
Sin embargo, sucede que el formato para los certificados que contienen claves públicas de ECDH es completamente idéntico al formato para los certificados que contienen claves públicas de ECDSA; de hecho, el formato contiene "una clave pública EC" sin indicación del algoritmo deseado (ECDH o ECDSA). Por lo tanto, cualquier clave privada y certificados para ECDSA (clave privada para generar firmas de ECDSA, certificado autofirmado o firmado por cualquier otra CA) serán aptos para los conjuntos de cifrado ECDH- *.
El único caso que no sé cómo producir con la herramienta de línea de comandos OpenSSL es un certificado estático Diffie-Hellman (no EC). Sin embargo, tenga en cuenta que OpenSSL tampoco admite SSL / TLS con conjuntos de cifrado DH estáticos, por lo que incluso si pudiera producir el certificado, no funcionaría con OpenSSL.
(Y, de hecho, nadie usa DH estático en la práctica.)