OpenSSL genera diferentes tipos de certificados autofirmados

14

¿Alguien sabe cómo usar OpenSSL para generar certificados para los siguientes tipos de clave pública?

  1. DSA: para el intercambio de claves DHE_DSS .
  2. Diffie-Hellman: para el intercambio de claves DH_DSS y DH_RSA .
  3. ECDH: para el intercambio de claves ECDH_ECDSA y ECDH_RSA .
  4. ECDSA: para el intercambio de claves ECDHE_ECDSA .

La mayoría de lo que puedo encontrar en línea te enseña cómo generar un certificado de tipo RSA.

    
pregunta Ryu 22.10.2013 - 12:12
fuente

2 respuestas

22

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

    
respondido por el Tom Leek 22.10.2013 - 17:53
fuente
6

Simplemente dragando una vieja pregunta. Hace poco tuve la necesidad de crear un certificado DH para fines de prueba. Asi es como se hace. Primero cree los parámetros DH y la clave privada según la respuesta de Tom:

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

A continuación, crea el archivo de clave pública:

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

Ahora necesitas un archivo CSR. Los CSR son autofirmados, lo que obviamente no se puede hacer para DH porque DH no es un algoritmo de firma. Pero cree uno de todos modos para una clave diferente (una que puede firmar, por ejemplo, RSA). Para crear una clave RSA y un CSR asociado:

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

Finalmente, usted genera el certificado DH a partir de la CSR RSA y la clave pública DH. No es posible crear un certificado DH autofirmado porque (como se indicó anteriormente) DH no es un algoritmo de firma. Por lo tanto, deberá configurar una clave / certificado de CA. En este ejemplo, asumo que usted ha creado previamente un CAkey.pem y CAcert.pem:

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

Su certificado DH estará en dhcert.pem

    
respondido por el Matt Caswell 02.03.2015 - 23:55
fuente

Lea otras preguntas en las etiquetas