Solicitudes de firma de OpenSSL con extensiones

8

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íficas para cada servidor. Tengo un gran openssl.cnf 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 openssl, uso los parámetros -config myCustomOpenssl.cnf -reqexts server0_http. Cuando miro mi solicitud, openssl req -text -noout -in myrequest.csrtodo se ve perfecto.

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

¿Es ese el comportamiento esperado? Siempre pensé que el archivo csr solo debe 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 con secciones faltantes. Para obtener el certificado como lo quiero, tengo que proporcionar el archivo csr y la sección correspondiente del archivo de configuración 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?

Bananguin
fuente

Respuestas:

7

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

Para hacer openssl, copie las extensiones solicitadas en el certificado, uno debe especificar copy_extensions = copypara la firma. En instalaciones de vainilla, 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 "usar con precaución". Los solicitantes pueden abusar de esto para que emita un certificado de CA, si no tiene cuidado.

Bananguin
fuente