openssl "no se puede encontrar 'nombre_ distinguido' en la configuración"

40

Me sale el siguiente error de openssl req:

unable to find 'distinguished_name' in config
problems making Certificate Request
41035:error:0E06D06C:configuration file routines:NCONF_get_string:no value:/SourceCache/OpenSSL098/OpenSSL098-52.30.1/src/crypto/conf/conf_lib.c:329:group=req name=distinguished_name

Entiendo que este es el "Sujeto" que no puede encontrar ... sin embargo, estoy especificando que:

openssl req -new \
    -key "$PRIVATE_KEY" \
    -sha256 \
    -config "$OPTIONS_FILE" \
    -subj "/C=US/ST=California/L=San Francisco/O=ACME, Inc./CN=*.*.$DOMAIN/" \
    -out "$CSR_FILENAME"

La única sugerencia del manual es que el archivo de configuración no existe; Puedo cat "$OPTIONS_FILE", así que definitivamente está allí, y el error no está precedido por el error que el manual señala que iría precedido si este fuera el caso, así que estoy bastante seguro de que opensslve el archivo de configuración.

Mi archivo de configuración contiene lo siguiente:

[req]
req_extensions = v3_req

[ v3_req ]
# Extensions to add to a certificate request
basicConstraints = CA:FALSE
keyUsage = nonRepudiation, digitalSignature, keyEncipherment
subjectAltName = @alt_names

[alt_names]
DNS.1 = *.*.example.com 

... que es literalmente el ejemplo en los documentos .

¿Qué estoy haciendo mal aquí?

Thanatos
fuente
1
Nota menor: el subjectAltName especificado aquí, *.*.example.comno es válido. (Solo puede tener 1 *, y solo en el componente más a la izquierda.) Esto no se relaciona con el problema aquí, pero no c / p a ciegas.
Thanatos el

Respuestas:

30

Casi como puedo ver , -configestá anulando algún tipo de configuración interna; si ve la sección "EJEMPLOS" de la página de manual para openssl req , muestra un ejemplo de un archivo de configuración que contiene distinguished_name. En una corazonada, agregué lo siguiente a mi configuración:

[req]
…
distinguished_name = req_distinguished_name

[req_distinguished_name]
# empty.

Por lo tanto, toda mi configuración se parecía a algo

[req]
req_extensions = v3_req
distinguished_name = req_distinguished_name

[req_distinguished_name]

[v3_req]
# Extensions to add to a certificate request
basicConstraints = CA:FALSE
keyUsage = digitalSignature, keyEncipherment
subjectAltName = @alt_names

[alt_names]
DNS.1 = *.*.${DOMAIN}

(Tenga en cuenta que aquí ${DOMAIN}no es literal; debe reemplazarlo con su nombre de dominio DNS; creo este archivo en un bashscript con cat >"$OPTIONS_FILE" <<EOF, seguido de lo anterior, seguido de EOF)

openssl req … -subj <my subject> -config <that file> …Luego tomé mi tema de la línea de comando. Para aquellos interesados, todo el comando terminó pareciéndose a:

openssl req -new \
    -key "$PRIVATE_KEY" \
    -sha256 \
    -config "$OPTIONS_FILE" \
    -subj "/C=US/ST=California/L=San Francisco/O=My Company, Inc./CN=*.*.$DOMAIN/" \
    -out "$CSR_FILENAME"

A partir de esta publicación, entiendo que SHA-1 está en desuso¹ para los certificados X.509, por -sha256lo tanto (que es un indicador indocumentado ...), y subjectAltName se está volviendo obligatorio², de ahí la necesidad de la configuración. El único problema adicional que conozco para generar una CSR de mejores prácticas para lo anterior es que debe usar un tamaño de clave RSA de al menos 2048 bits (si está usando RSA, que yo soy); se debe especificar el tamaño de la openssl genrsaorden como el valor predeterminado actual es inseguro.

¹Aunque no está roto en el momento en que escribo esto, la gente siente que es solo cuestión de tiempo. Consulte "
Puesta de sol gradual SHA1" ² Ya no se recomienda usar CN para el nombre de dominio; No estoy seguro de cuándo / si los navegadores planean desaprobar esto. "Aléjese de incluir y verificar cadenas que parecen nombres de dominio en el Nombre común del sujeto", RFC 6125
Nota: Estoy menos seguro acerca del valor "correcto" de keyUsage.

Thanatos
fuente
2
Vea mi nota sobre la pregunta; la configuración en esta respuesta no es válida, ya que *.*.example.comno es válida (no puede tener múltiples *s); c / p-ers ten cuidado.
Thanatos el
La sección vacía req_distinguished_nameno es aceptada por openssl 1.1.0f, por lo que debe tener al menos countryName_defaultallí (consulte Openssl.conf Walkthru ).
AntonK
12

Tuve el mismo problema y encontré la respuesta aquí:

https://www.citrix.com/blogs/2015/04/10/how-to-create-a-csr-for-a-san-certificate-on-netscaler/

El archivo de configuración se ve así:

[req]
distinguished_name = req_distinguished_name
req_extensions = v3_req
prompt = no
[req_distinguished_name]
C = US
ST = VA
L = SomeCity
O = MyCompany
OU = MyDivision
CN = www.company.com
[v3_req]
keyUsage = keyEncipherment, dataEncipherment
extendedKeyUsage = serverAuth
subjectAltName = @alt_names
[alt_names]
DNS.1 = www.company.com
DNS.2 = company.com
DNS.3 = www.company.net 
DNS.4 = company.net 

Y entonces:

openssl req -new -key private.key -sha256 -nodes -config openssl.conf -out certificate.csr
Miquel
fuente
1
Esto también funcionaría; Estaba especificando el tema en la línea de comando (ya que era más simple para mi caso de uso); esto solo lo mueve al archivo de configuración. Más aún, mi pregunta se relacionaba con OpenSSL quejándose de que no se podía encontrar el tema cuando, de hecho, se había especificado.
Thanatos el
No estoy seguro de si esta solución funciona: en Windows informa constantemente "No se puede encontrar el nombre_definido en la configuración" lo intentó todo.
hagubear
1
La req_distinguished_namesección se puede dejar en blanco. Lo que hace es especificar la plantilla de etiquetas de los nombres de campo requeridos, que se pueden sobrescribir con -subj= /C=xx/ST=xx/L=xx/O=xx/OU=xx/CN=xxetc., es decir, no asignar esos valores de campo.
Devy
5

Para mí, este error parece ser causado por una creación de ruta incorrecta al ejecutar el comando en Windows Server 2012, C:\OpenSSL-Win32\bin

openssl req -new -sha256 -key private.pem -out example.csr

que generó un error sin bloqueo antes de pedir pass phare:

No se puede abrir C: \ Archivos de programa (x86) \ Archivos comunes \ SSL / openssl.cnf para leer, No hay ningún archivo o directorio

Claramente, la ruta no es válida debido a la barra oblicua incorrecta, por lo que el archivo de configuración debe agregarse explícitamente en la línea de comando:

openssl req -new -sha256 -key private.pem -config openssl.cfg -out example.csr
Alexei
fuente
Esto funcionó para mí, agradable y limpio. ¡Muchas gracias!
Sossenbinder
Si bien esto sin duda resuelve su problema, no se relaciona con la pregunta original, aparte de tener que hacerlo con OpenSSL. (Esto podría ser mejor como una pregunta / respuesta separada)
Thanatos
Esto fija mi problema con el "openssl incapaz de encontrar 'distinguished_name' en config” gracias!
chris31389
1

Este error similar:

$ openssl req -x509 -newkey rsa: 4096 -keyout _key.pem -out cert.pem -days 365 -nodes Se le pedirá que ingrese información que se incorporará a su solicitud de certificado. Lo que está a punto de ingresar es lo que se llama un nombre distinguido o un DN. Hay bastantes campos, pero puede dejar algunos en blanco. Para algunos campos habrá un valor predeterminado. Si ingresa '.', El campo se dejará en blanco. ----- Nombre del país (código de 2 letras) [AU]: problemas para realizar la solicitud de certificado

(Ubuntu 17.04) significaba "necesitas agregar

-subj "/C=US/ST=California/L=San Francis co/O=ACME, Inc./CN=*.*.$DOMAIN/"

a la línea de comando "FWIW.

rogerdpack
fuente
0

Otro posible problema puede ser caracteres especiales (invisibles) UTF-8. Verifique su archivo usando

cat -v $OPTIONS_FILE
feri
fuente