¿Por qué la generación de un certificado X509 autofirmado no requiere mi clave pública?

5

Digamos que tengo un par de llaves RSA (2048) que generé

private.key
public.key

Para realizar pruebas, me gustaría generar un certificado X509 autofirmado.

Mi comprensión de un certificado es que -

  1. Muestra la prueba de propiedad de la clave pública, verificada por otra parte (en este caso verificada por mí, desde que firmé)
  2. Contiene la clave pública dentro de sí misma

Parece que openssl me permite crear un certificado con bastante facilidad:

openssl req -new -key private.key -out certificate.csr

Pero aquí es donde estoy confundido: ¿por qué requiere mi clave privada?

Puedo imaginar que probablemente deba firmarlo con algo, de ahí el uso de la clave privada. Pero entonces, ¿cómo hace que mi clave pública se incruste en el certificado? Desde el punto de vista matemático, es imposible aplicar ingeniería inversa a mi clave pública desde mi clave privada, ¿no?

¡Gracias!

    
pregunta user2490003 08.06.2017 - 23:01
fuente

3 respuestas

6

La clave privada es el secreto que lo identifica a usted, cualquier firma o verificación de su identidad específica necesita la clave privada. Por lo tanto, cualquier operación que genere algo que se derive de su identidad lo requerirá.

Además, aquí no está creando un certificado, está creando una solicitud de firma de certificado, algo que le entregaría a otra persona a la que luego generaría el certificado para otorgarle el acceso.

si desea crear un certificado x509 autofirmado, debe agregar el parámetro -x509, algo como esto:

openssl req -x509 -nodes -days 5000 -newkey rsa:2048 -keyout mypem.key -out mycert.crt
  • donde días son por cuánto tiempo es válido el certificado (5000 es efectivamente indefinido)
  • los nodos omiten el negocio de contraseñas (omitir para probar, omitir para cualquier cosa real)
  • y también genera la clave y el certificado para su uso posterior

Y @bartonjs es correcto, la clave privada a la clave pública es posible, la clave pública a la clave privada no. Es por eso que puede entregar la clave pública y nadie puede usarla para hacerse pasar por usted. La clave privada debe ser secreta en todo momento.

Si planea actuar como el cliente que desea obtener acceso al servidor y también al servidor que concede la solicitud, primero deberá configurar su autoridad de certificación en el servidor y los certificados del servidor.

Somone on stack overflow ya tiene una gran respuesta:

Pero el juiste básico es que configuras la CA y crt del servidor y luego haces algo como esto en el servidor:

openssl x509 -req -days 30 -in request.csr -CA ca.crt -CAcreateserial -CAkey ca.key -out signedrequest.crt 

le devuelve el "signedrequest.crt" a la persona que lo solicitó.

Olvidé mencionar, deshacerme de -nodos en mi comando anterior, omite el proceso de contraseña. Bueno para probar, malo para seguridad. Sólo FYI.

    
respondido por el Nalaurien 08.06.2017 - 23:15
fuente
3
  

Desde el punto de vista matemático, es imposible para él aplicar ingeniería inversa a mi clave pública desde mi clave privada, ¿no?

No, tu dirección es hacia atrás.

Desde una clave pública es (se supone que es) imposible obtener una clave privada. Desde una clave privada, la clave pública es fácil.

Para RSA, la clave privada es (n, d), pero más prácticamente es (p, q, e). p * q = n, y (n, e) es la clave pública.

Para ECDSA, la clave privada es d , el número por el cual multiplicas G para obtener Q , la clave pública. Ya que necesitas recordar la curva en la que te encuentras, eso te da G , y d*G aún es Q , la clave pública.

    
respondido por el bartonjs 08.06.2017 - 23:07
fuente
1

El archivo de clave privada contiene todos los pares de claves. Contiene la parte pública que pone en el certificado autofirmado o la solicitud de firma de certificado, y necesita la parte privada para realizar la (autofirmación).

Puede exportar la parte pública desde el archivo de clave privada con:

openssl rsa -pubout -in private_key.pem -out public_key.pem
    
respondido por el eckes 09.06.2017 - 00:07
fuente

Lea otras preguntas en las etiquetas