¿Por qué "keytool.exe" con "-certreq" arg requiere un alias?

1

Estoy usando la utilidad JDK "keytool.exe" para intentar crear un CSR (solicitud de firma de certificado) con el argumento "-certreq". Me preguntaba por qué esto requiere un alias (es decir, de otro certificado en el almacén de claves) cuando ni siquiera he recibido el certificado de la CA (a quien le envié el CSR). Entiendo que se podría usar para casar el certificado firmado con un par de claves existente / certificado autofirmado, pero lo que quiero hacer es (para crear un nuevo certificado):

  1. Genere un CSR para enviar a CA ("-certreq" arg).
  2. Al recibir el certificado firmado, genere un nuevo par de claves ("-genkeypair arg)" con alias nuevo .
  3. Importe mi nuevo certificado contra ese alias de # 2.

Mi opinión es que no debería necesitar una entrada / alias del almacén de claves para el paso # 1. ¿Realmente necesito algún certificado autofirmado ficticio en el primer almacén de claves? Gracias!

    
pregunta user1172173 05.11.2018 - 17:25
fuente

2 respuestas

1

Debe generar el par de claves antes de enviar una solicitud de certificado, porque esa solicitud de certificado contiene la clave pública y está firmada con la llave privada. Por lo tanto, no es posible generar un nuevo par de claves después de la CSR, ya que obtendría una clave pública diferente a la del certificado devuelto, y la clave privada no coincidirá con la clave pública del certificado.

La forma en que Java maneja las claves privadas está muy ligada a TLS y X.509 / PKIX. Eso significa que para que exista una clave privada es necesario estar vinculado a una cadena de certificados y un alias. Debido a esto, la clave privada se genera con un certificado autofirmado que simplemente contiene la información también en la CSR. Solo recientemente, Java está adoptando una forma más flexible de manejar los almacenes de claves: también ha cambiado a los almacenes de claves PKCS # 12 como predeterminados para eso.

La vinculación de las claves privadas con las cadenas de certificados fue una decisión de diseño para Java: no estoy seguro del por qué , supongo que es para simplificar las cosas.

    
respondido por el Maarten Bodewes 07.11.2018 - 04:43
fuente
1

Un certificado para una CSR es la clave pública de un par de claves más algunos metadatos. En efecto, le está pidiendo a un miembro de la infraestructura de clave pública de confianza que "responda por" su clave pública como proveniente de usted. Una vez que la autoridad haya validado los metadatos, le emitirán un certificado con su clave pública que está firmada por la autoridad.

Una vez que tenga un certificado firmado, siga la documentación de Oracle para fusionarlo en su almacén de claves con su par de claves existente: enlace . Esto sobrescribirá su clave pública sin firmar en la tienda con la versión firmada de la autoridad de certificación emisora. (gracias Maarten Bowedes )

La autoridad está firmando la mitad pública de su par de claves original como proveniente de usted . Si genera un nuevo par de claves y sobrescribe su alias, efectivamente estará escribiendo sobre la clave privada asociada con su certificado (ahora válido).

    
respondido por el ConsideredHarmful 07.11.2018 - 00:06
fuente

Lea otras preguntas en las etiquetas