Solicitudes de firma OpenSSL con extensiones

Solicitudes de firma OpenSSL con extensiones

Configuré una pequeña CA autofirmada para mi entorno de desarrollo. Me gustaría crear muchos certificados de servidor diferentes con diferentes propiedades. Mi enfoque es crear una sección de extensiones específica para cada servidor. Tengo un openssl.cnf grande que contiene secciones como esta:

[ server0_http ]

nsCertType                      = server
nsComment                       = "HTTP server0"
basicConstraints=CA:FALSE
extendedKeyUsage=serverAuth
subjectAltName=@server0_http_altnames

[ server0_http_altnames ]
URI.1 = https://server.domain.tld
URI.2 = http://server.domain.tld
IP.1  = 1.2.3.4
DNS.1 = server.doamin.tld

Luego, cuando creo mi csr usando, openssluso los parámetros -config myCustomOpenssl.cnf -reqexts server0_http. Cuando miro mi solicitud usando openssl req -text -noout -in myrequest.csrtodo se ve perfecto.

Sin embargo, después de firmar la solicitud, las secciones "Uso extendido de clave X509v3" y "Nombre alternativo del sujeto X509v3" desaparecieron. Para solucionar este problema, también puse -extfile myCustomOpenssl.cnf -reqexts server0_httplos parámetros para la llamada de firma a openssl.

¿Es ese el comportamiento esperado? Siempre pensé que el archivo csr por sí solo debía ser suficiente para crear un certificado según lo solicitado, es decir, con todas sus secciones. La forma en que funciona mi sistema en este momento es que obtengo un certificado al que le faltan secciones. Para obtener el certificado como lo quiero, tengo que proporcionar el archivo csr y la sección correspondiente del archivo de configuración de openssl que utilicé para crear la solicitud. Esto no es un problema para mi configuración pequeña, pero se vuelve bastante complicado si me convierto en una CA más grande. ¿Se supone que es así o estoy usando openssl incorrectamente?

Respuesta1

¡Lo encontré! Lo que describí es el comportamiento normal esperado de openssl. De forma predeterminada, las extensiones personalizadas no se copian en el certificado.

Para hacer que openssl copie las extensiones solicitadas al certificado, se debe especificar copy_extensions = copypara la firma. En instalaciones estándar, esto significa que esta línea debe agregarse a la sección default_CAen openssl.cnf.

En el openssl.cnfque se envía con (al menos) Centos la línea ya está incluida como comentario y lleva la advertencia "úselo con precaución". Los solicitantes pueden abusar de esto para obligarle a emitir un certificado de CA, si no tiene cuidado.

información relacionada