No se puede cargar la información de configuración de /usr/local/ssl/openssl.cnf en Windows

184

Mientras usa OpenSSL en Windows:

openssl genrsa -out privatekey.pem 1024 -->

Creado con éxito

openssl req -new -x509 -key privatekey.pem -out publickey.cer -days 365 
---->

Mostrando mensaje de error como

no se puede cargar la información de configuración de /usr/local/ssl/openssl.cnf

karthik
fuente
44
Todas las respuestas muestran que de alguna manera uno debe hacer referencia al archivo de configuración openssl.cnf .. PERO nadie menciona qué archivo de configuración, ?? quien lo crea ?? cual es su contenido
joedotnot

Respuestas:

170

Después de instalar OpenSSL, tuve que crear una nueva variable de entorno:

  • Nombre: OPENSSL_CONF
  • Valor: C:\Program Files\OpenSSL\openssl.cnf

En powershell:

$env:OPENSSL_CONF = "${env:ProgramFiles}\OpenSSL\openssl.cnf"

Este valor difiere de las versiones de instalación anteriores (como se vio en una edición anterior de esta publicación). Además, no olvide agregar la carpeta binaria openssl ${env:ProgramFiles}\OpenSSLa su ruta.

lame_coder
fuente
16
En la versión 1.0.1j tuve que usar C:\OpenSSL-Win32\bin\openssl.cfgen su lugar.
Kevin Panko
77
O C: \ OpenSSL-Win64 \ bin \ openssl.cfg en sistemas de
64 bits
13
O C:\Program Files (x86)\Git\ssl\openssl.cfgpara aquellos que ya tienen git.
kspearrin
¿Dónde / cómo está configurando este valor?
matthew_360
Esto lo pondría en el entorno de inicio de su usuario:SETX OPENSSL_CONF c:/libs/openssl-0.9.8k/openssl.cnf
Ross Presser el
78

Debe especificar la ruta absoluta a la configuración, algo como esto:

openssl req -x509 -config "C:\OpenSSL-Win64\bin\openssl.cnf" ...
zombi_man
fuente
36
-config C: \ OpenSSL-Win64 \ bin \ openssl.cnf
TimK
44
En la versión 1.0.1e descargada de slproweb.com/products/Win32OpenSSL.html solo hay el archivo openssl.cfgpresente en el directorio bin después de la instalación. Pero con este archivo parece funcionar de todos modos.
vanje
9
Si está utilizando el OpenSSL provisto con Git, entonces puede intentarlo-config "C:\Program Files (x86)\Git\ssl\openssl.cnf"
Joel B el
2
openssl: Error: '-config' es un comando no válido. ¿Cómo lo configuran ustedes?
benez
1
@kewlbfy vea la respuesta de @Kosar a continuación para saber dónde usar la -configbandera, esto funcionó para mí
danjah
36

En Windows 10, no es necesario reiniciar ni ejecutar en modo Administrador, sino que establece la configuración de openssl de esta manera:

set OPENSSL_CONF=C:\Program Files (x86)\GnuWin32\share\openssl.cnf

Por supuesto, si estás usando GnuWin32

Perla Negra
fuente
20

En Windows, [ escenario similar ]

Estaba enfrentando el mismo problema, pero fue durante la solicitud de solicitud de firma de certificado.

Hice lo siguiente, funcionó para mí.

Una vez que OpenSSL se instaló, ejecutó el símbolo del sistema como administrador después del reinicio del sistema.

hizo, 1. [Caso de error]

C:\OpenSSL-Win64\bin>openssl req -new -key server.key -out server.csr

ADVERTENCIA: no se puede abrir el archivo de configuración: C: \ OpenSSL-Win64 \ bin \ openssl.cnf Y no se puede cargar la información de configuración de C: \ OpenSSL-Win64 \ bin \ openssl.cnf

2. [Trabajado con advertencia]

C:\OpenSSL-Win64\bin> openssl req -new -key server.key -out server.csr -config C:\OpenSSL-Win64\bin\openssl.cfg

[Mensaje de advertencia]: ADVERTENCIA: no se puede abrir el archivo de configuración: C: \ OpenSSL-Win64 \ bin \ openssl.cnf

Pero yo le pida la palabra de acceso para server.key Se trabajó para mí.

Me referí, este enlace para mi ayuda.

Gracias.

tordo músico
fuente
Gracias, el enlace que proporcionó me ayudó mucho: akadia.com/services/ssh_test_certificate.html
leole
15

Lo único que me funcionó en esta situación fue el archivo openssl.cnf de creación propia .

Estos son los conceptos básicos necesarios para este ejercicio (edite según sea necesario):

#
# OpenSSL configuration file.
#

# Establish working directory.

dir                         = .

[ ca ]
default_ca                  = CA_default

[ CA_default ]
serial                      = $dir/serial
database                    = $dir/certindex.txt
new_certs_dir               = $dir/certs
certificate                 = $dir/cacert.pem
private_key                 = $dir/private/cakey.pem
default_days                = 365
default_md                  = md5
preserve                    = no
email_in_dn                 = no
nameopt                     = default_ca
certopt                     = default_ca
policy                      = policy_match

[ policy_match ]
countryName                 = match
stateOrProvinceName         = match
organizationName            = match
organizationalUnitName      = optional
commonName                  = supplied
emailAddress                = optional

[ req ]
default_bits                = 1024          # Size of keys
default_keyfile             = key.pem       # name of generated keys
default_md                  = md5               # message digest algorithm
string_mask                 = nombstr       # permitted characters
distinguished_name          = req_distinguished_name
req_extensions              = v3_req

[ req_distinguished_name ]
# Variable name             Prompt string
#-------------------------    ----------------------------------
0.organizationName          = Organization Name (company)
organizationalUnitName      = Organizational Unit Name (department, division)
emailAddress                = Email Address
emailAddress_max            = 40
localityName                = Locality Name (city, district)
stateOrProvinceName         = State or Province Name (full name)
countryName                 = Country Name (2 letter code)
countryName_min             = 2
countryName_max             = 2
commonName                  = Common Name (hostname, IP, or your name)
commonName_max              = 64

# Default values for the above, for consistency and less typing.
# Variable name             Value
#------------------------     ------------------------------
0.organizationName_default  = My Company
localityName_default        = My Town
stateOrProvinceName_default = State or Providence
countryName_default         = US

[ v3_ca ]
basicConstraints            = CA:TRUE
subjectKeyIdentifier        = hash
authorityKeyIdentifier      = keyid:always,issuer:always

[ v3_req ]
basicConstraints            = CA:FALSE
subjectKeyIdentifier        = hash

Espero que eso ayude.

simhumileco
fuente
1
Después de haber probado todas las demás soluciones enumeradas aquí, esta funcionó para mí. Una vez que se crea la configuración (en el directorio openssl.exe) puede ejecutaropenssl req -new -x509 -key privatekey.pem -out publickey.cer -days 365 -config openssl.cnf
Jimbo
12

Después de instalar OpenSSL, debe reiniciar su computadora y usarla Run As Administrator. Entonces sus obras.

karthik
fuente
11

Con las herramientas GnuWin32 encontré el openssl.cnf en C: \ gnuwin32 \ share

set OPENSSL_CONF=C:\gnuwin32\share\openssl.cnf
TL
fuente
9

Para mí en Windows 8, simplemente encontré el archivo openssl.cnf y lo copié en la unidad C. luego:

openssl req -new -key server.key -out server.csr -config C:\openssl.cnf

Funcionó perfectamente.

Ali
fuente
6

En Windows 7 no tuve que reiniciar, simplemente ejecute el símbolo del sistema en modo administrador.

Calgary Libertario
fuente
4

En mi caso, necesito configurar la ruta del archivo openssl.cnf manualmente en el comando usando la configopción. Entonces el comando

openssl req -x509 -config "C:\Users\sk\Downloads\openssl-0.9.8k_X64\openssl.cnf" -newkey rsa:4096 -keyout key.pem -out cert.pem -nodes -days 900
Sunil Garg
fuente
3

Si está utilizando Win32 OpenSSL v1.1.0g , configurando esta variable de entorno:

set OPENSSL_CONF=C:\OpenSSL-Win32\bin\cnf\openssl.cnf

Antes de ejecutar este comando con "server.key" , crear correctamente "server.csr" :

openssl req -new -key server.key -out server.csr
5viente
fuente
1

Sobre la pregunta básica de por qué no se encuentra openssl: Respuesta corta: Algunos paquetes de instalación para openssl tienen un openssl.cnf predeterminado incluido previamente. Otros paquetes no. En este último caso, incluirá uno del enlace que se muestra a continuación; Puede ingresar datos específicos del usuario adicionales (nombre de DN, etc.) según sea necesario.

Desde https://www.openssl.org/docs/manmaster/man5/config.html, cito directamente:

"CONFIGURACIÓN DE LA BIBLIOTECA DE OPENSSL

Las aplicaciones pueden configurar automáticamente ciertos aspectos de OpenSSL utilizando el archivo de configuración maestro de OpenSSL u, opcionalmente, un archivo de configuración alternativo. La utilidad openssl incluye esta funcionalidad: cualquier subcomando usa el archivo maestro de configuración OpenSSL a menos que se use una opción en el subcomando para usar un archivo de configuración alternativo.

Para habilitar la configuración de la biblioteca, la sección predeterminada debe contener una línea apropiada que apunte a la sección de configuración principal. El nombre predeterminado es openssl_conf que utiliza la utilidad openssl. Otras aplicaciones pueden usar un nombre alternativo como myapplication_conf. Todas las líneas de configuración de la biblioteca aparecen en la sección predeterminada al comienzo del archivo de configuración.

La sección de configuración debe consistir en un conjunto de pares de nombre y valor que contienen información de configuración específica del módulo. El nombre representa el nombre del módulo de configuración. El significado del valor es específico del módulo: puede, por ejemplo, representar una sección de configuración adicional que contiene información específica del módulo de configuración. P.ej:"

Por lo tanto, parece que uno debe configurar por sí mismo openssl.cnf de acuerdo con su Nombre distinguido (DN), junto con otras entradas específicas para su uso.

Aquí está el archivo de plantilla desde el cual puede generar openssl.cnf con sus entradas específicas.

Una aplicación realmente tiene una instalación de demostración que incluye un archivo de demostración .cnf.

Además, si necesita acceder programáticamente a archivos .cnf, puede incluir encabezados apropiados --openssl / conf.h-- y analizar sus archivos .cnf usando

CONF_modules_load_file(const char *filename, const char *appname,
                            unsigned long flags);

Aquí hay documentos para "CONF_modules_load_file";

amor del código
fuente
0

Para mí, poner variable antes de llamar hizo el truco:

OPENSSL_CONF=/usr/ssl/openssl.cnf openssl req -new -x509 -key privatekey.pem -out publickey.cer -days 365
VoloshinS
fuente
0

En Windows Powershell:

$env:OPENSSL_CONF = "${env:ProgramFiles}\OpenSSL-Win64\bin\openssl.cfg"
Herrero
fuente