Firmar CRT existente

1

Esta es mi única línea para generar certificados autofirmados

openssl req -x509 -out localhost.crt -keyout localhost.key \
  -newkey rsa:2048 -nodes -sha256 \
  -subj '/CN=example.com' -extensions EXT -config <( \
   printf "[dn]\nCN=example.com\n[req]\ndistinguished_name = dn\n[EXT]\nsubjectAltName=DNS:example.com\nkeyUsage=digitalSignature\nextendedKeyUsage=serverAuth")

Ahora quiero firmar certificados anteriores con mi propia CA, así que emito esto:

openssl genrsa -des3 -out rootCA.key 4096
openssl req -x509 -new -nodes -key rootCA.key -sha256 -days 1024 -out rootCA.crt

¿Cómo puedo firmar con mi CA un CRT existente?

    
pregunta SystematicFrank 06.04.2018 - 17:05
fuente

2 respuestas

1
  

¿Cómo puedo firmar con mi CA un CRT existente?

Solo puede firmar una solicitud de certificado pero no un certificado. Pero puede crear una solicitud de certificado a partir de un certificado existente y luego firmar esta solicitud de certificado. Consulte Generar CSR a partir del certificado existente .

    
respondido por el Steffen Ullrich 06.04.2018 - 17:44
fuente
1

Aunque esto es algo inusual, la línea de comandos de OpenSSL, que incluye muchas características destinadas principalmente a problemas de depuración, puede hacerlo. Use openssl x509 ( sin -req ) con -CA certfile -CAkey keyfile o solo -CA file si tiene cert y privatekey en un archivo (lo que puede hacer PEM). Añade -digestname e.g. -sha256 si no es el predeterminado (SHA1). Puede especificar la nueva serie explícitamente con -set_serial , o usar casi el mismo esquema de archivo serie como openssl ca de forma predeterminada o explícitamente; vea man [1ssl?] x509 en su sistema (a menos que Windows) o en la web en el encabezado 'Opciones de firma' alrededor de 1/3 del camino hacia abajo. (La diferencia es que ca usa el valor hexadecimal del archivo después de incrementando, pero x509 [-req] -CA* lo usa antes . La asignación serial / cert NO se registra en un archivo 'base de datos', como lo hace ca .) Puede especificar la duración del período de validez, pero no puede especificar tiempos de inicio y final arbitrarios como ca can.

Esto reemplaza el nombre del emisor, el número de serie, el período de validez y la firma en el nuevo certificado (de salida), pero no cambia ninguna de las extensiones, que en su caso se ve bien. Si el certificado de entrada contiene la extensión AuthorityKeyIdentifier (AKI) para identificar su certificado padre / 'firmante', esa extensión en el certificado de salida no identificará correctamente a su padre, lo que puede causar problemas al usar el certificado. Puedes reemplazar las extensiones agregando -clrext -extfile filename -extensions section , pero debes hacer todas de ellas, lo que puede ser inconveniente.

Si utiliza el proceso de dos pasos de x509 -x509toreq para crear un CSR y luego x509 -req -CA* o ca para emitir un certificado de ese CSR, esto descarta todas las extensiones del certificado de entrada. Si desea alguna extensión, debe volver a agregarla: para x509 -req -CA* esto debe ser explícito en la línea de comando; para ca puede configurarse en el archivo de configuración o anularse en la línea de comandos.

ObRant: emitir un certificado a menudo se describe como 'firmar el CSR / request'. No lo es. El cuerpo del certificado, también conocido como certTBS (TBS = a-be-be-signed), normalmente se basa en parte en el CSR, pero la mayoría del cuerpo del certificado es diferente del CSR.

    
respondido por el dave_thompson_085 07.04.2018 - 09:38
fuente

Lea otras preguntas en las etiquetas