OpenSSL y error al leer el archivo openssl.conf


119

Estoy ejecutando windows xp 32bit

Acabo de descargar Openssl de la siguiente URL y lo instalé. http://www.slproweb.com/products/Win32OpenSSL.html

y luego intenté crear un certificado autofirmado usando el siguiente comando

openssl req -x509 -days 365 -newkey rsa:1024 -keyout hostkey.pem -nodes -out hostcert.pem

luego comenzó a dar el siguiente error

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

Luego, después de buscar en Google, cambié el comando anterior a

openssl req -config C:\OpenSSL\bin\openssl.conf -x509 -days 365 -newkey rsa:1024 -keyout hostkey.pem -nodes -out hostcert.pem

Pero ahora aparece el siguiente error en el símbolo del sistema

error en la línea -1 de C: \ OpenSSL \ bin \ openssl.conf
4220: error: 02001002: biblioteca del sistema: fopen: No existe tal archivo o directorio:. \ crypto \ bio \ bss_file.c: 126: fopen ('C: \ OpenSSL \ bin \ openssl.conf ',' rb ') 4220: error: 2006D080: rutinas BIO: BIO_new_file: no existe tal archivo:. \ Crypto \ bio \ bss_file.c: 129:
4220: error: 0E078072: rutinas del archivo de configuración : DEF_LOAD: no existe tal archivo:. \ Crypto \ conf \ conf_def.c: 197:

Por favor ayuda. Gracias por adelantado.


3
comprobar el nombre de archivo exacto: openssl.conf ---> openssl.cnf
Mark

2
la extensión del archivo en Windows ahora es .cfg. También asegúrese de que la ruta del archivo especificada (en la línea de comando o en la variable de entorno OPENSSL_CONF) no esté entre comillas.
tatx

La extensión del archivo (.cnf / .cfg) parece variar según lo que se utilizó para instalar OpenSSL. En una instalación de WampServer v3.2.2, acabo de hacer que el nombre del archivo de configuración fuera openssl.cnf. También hice una instalación de Window10 de 64 bits usando los binarios de Shining Path Productions. El nombre del archivo en esa instalación era openssl.cfg. Esta diferencia en los nombres de extensión del archivo de configuración de OpenSSL parece depender de la compilación. Aún no he probado qué nombre de extensión reconoce OpenSSL v1.1.1g.
Bill Vallance

Respuestas:


141

En Windows también puede establecer la propiedad del entorno OPENSSL_CONF. Por ejemplo, desde la línea de comandos puede escribir:

set OPENSSL_CONF=c:/libs/openssl-0.9.8k/openssl.cnf

para validarlo puede escribir:

echo %OPENSSL_CONF%

También puede configurarlo como parte de las variables ambientales de la computadora para que todos los usuarios y servicios lo tengan disponible de manera predeterminada. Consulte, por ejemplo, Variables de entorno en Windows NT y Cómo administrar variables de entorno en Windows XP .

Ahora puede ejecutar comandos openssl sin tener que pasar el parámetro de ubicación de configuración.


9
¡Gracias, funcionó para mí! (establezca OPENSSL_CONF = c: \ openssl-win32 \ bin \ openssl.cfg)
Valentin Heinitz

@jww intentó esto pero me dice que set es un comando inválido. ¿algunas ideas?
Sarah

3
@Sarah: setes un comando de Windows y está destinado a ejecutarse cmd.exe. No funcionará en una máquina que no sea Windows. La cosa sety echotampoco funciona en Power Shell. Usarías algo como $X=1; Write-Output $X.
jww

@jww gracias. Estoy en una máquina con Windows pero estaba usando ese comando en openssl.exe en lugar de cmd.exe. Leí su comentario y fui a cmd.exe y escribí el comando set allí en su lugar. Funcionó correctamente, pero todavía recibía el mismo error en openssl.exe que decía "No se puede cargar la información de configuración de la ruta incorrecta / ssl / openssl.cnf", así que probé la siguiente solución diciendo que agregue el parámetro -config con su directorio openssl y eso funcionó perfecto. entonces estoy feliz. gracias por la ayuda :)
Sarah

Debe marcarse como respuesta. Francamente, también debería ser innecesario. ¿Por qué esta distribución de Windows OpenSSL no simplemente está predeterminada en PWD, por ejemplo?
stonedauwg

40

Simplemente agregue a su línea de comando el parámetro -config c:\your_openssl_path\openssl.cfg, cambiando your_openssl_patha la ruta real instalada.


genial, he estado siguiendo esta publicación de blog ajden.towfeek.se/post/… y agregar -config también funciona para cygwin, por ejemplo, $ openssl ca -in server.csr -config /etc/ssl/openssl.cnf pero ¿ por qué no aparece -config en man openssl? openssl.org/docs/apps/openssl.html
barlop

@nneonneo probó esto y la solución anterior, pero me dice que set y config son comandos inválidos. ¿algunas ideas?
Sarah

set solo funciona en Windows; config no es un comando independiente (lo agrega a su línea de comando OpenSSL).
nneonneo

29

Simplemente cree un archivo openssl.cnf usted mismo como este en el paso 4: http://www.flatmtn.com/article/setting-openssl-create-certificates

Editar después de que el enlace dejó de funcionar El contenido del archivo openssl.cnf era el siguiente:

#
# 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

1
La URL ya no se encuentra
Greg Domjan


14

Si ha instalado Apache con OpenSSL, vaya al directorio bin. En mi caso D: \ apache \ bin.

* Estos comandos también funcionan si tiene una instalación independiente de openssl.

Ejecute estos comandos:

openssl req -config d:\apache\conf\openssl.cnf -new -out d:\apache\conf\server.csr -keyout d:\apache\conf\server.pem
openssl rsa -in d:\apache\conf\server.pem -out d:\apache\conf\server.key
openssl x509 -in d:\apache\conf\server.csr -out d:\apache\conf\server.crt -req -signkey d:\apache\conf\server.key -days 365

* Esto creará un certificado autofirmado que puede utilizar con fines de desarrollo.

Nuevamente, si tiene Apache instalado en httpd.conf, coloque estos:

  <IfModule ssl_module>
    SSLEngine on
    SSLCertificateFile "D:/apache/conf/server.crt"
    SSLCertificateKeyFile "D:/apache/conf/server.key"
  </IfModule>

El tipo que hizo la pregunta declaró claramente que estaba usando Win32OpenSSL. ¿De dónde vienen las cosas de Apache? ¿Cómo es relevante para la pregunta?
jww

3
Por supuesto que lo es, instalar OpenSSL que viene por separado o con Apache es lo mismo. He agregado el bit Apache porque en el 95% de los casos la razón de instalar OpenSSL en Windows es porque se va a usar con Apache.
Artur Kędzior

Esto es útil porque XAMPP incluye OpenSSL dentro de la carpeta Apache.
Jimmy Adaro

¡Trabajando como un encanto!
Divyesh Prajapati

12

Intente ejecutar openssl.exe como administrador.


2
No debería tener que ejecutar estos comandos como administrador para que funcionen. Es mejor solucionar el problema subyacente.
jww

Si está instalado en el directorio de archivos del programa en la unidad del sistema, se requiere ejecutar el comando con derechos elevados; de lo contrario, no tiene permisos de escritura.
CodeManX

1
Esto funcionó para mí. No sé por qué estaba intentando acceder C:\Program Files\Common Files\SSL/openssl.cnfy luego, cuando se ejecutó como administrador, de repente no le importó que no pudiera encontrarlo (y tampoco creó el archivo), pero esto funcionó para mí, así que no me importa ya sea.
Simon_Weaver

7

Acabo de tener un error similar al usar openssl.exe de la carpeta bin de Apache para Windows. Tenía el indicador -config especificado por tenía un error tipográfico en la ruta del archivo openssl.cnf. Creo que encontrarás eso

openssl req -config C:\OpenSSL\bin\openssl.conf -x509 -days 365 -newkey rsa:1024 -keyout hostkey.pem -nodes -out hostcert.pem

debiera ser

openssl req -config "C:\OpenSSL\bin\openssl.cnf" -x509 -days 365 -newkey rsa:1024 -keyout hostkey.pem -nodes -out hostcert.pem

Nota: el conf probablemente debería ser CNF .


4

Si la instalación de openssl fue exitosa, busque "OPENSSL" en la unidad c para ubicar el archivo de configuración y establecer la ruta.

set OPENSSL_CONF=<location where cnf is available>/openssl.cnf

Funcionó para mí.


3

Esta solución nos ayudó mucho en mi trabajo (soporte técnico), creamos un archivo por lotes simple que podíamos ejecutar desde cualquier lugar (no teníamos los permisos para instalarlo). Esta solución establecerá la variable y luego ejecutará OpenSSL por usted. También abre la carpeta bin para usted (porque aquí es donde se guardarán los archivos que cree o modifique). Además, esto es solo para Windows.

Como instalar:

  1. Descargue los binarios de OpenSSL aquí . (Tenga en cuenta que se ha confirmado que esto funciona con la versión 0.9.8h).
  2. Copie este código en un archivo llamado StartOpenSSL.bat. Guarde esto en una ubicación de su elección. Se puede ejecutar desde cualquier lugar.

    @echo off
    title OpenSSL
    
    cd\openssl\bin
    
    if exist "C:\openssl\share\openssl.cnf" (
    
    set OPENSSL_CONF=c:/openssl/share/openssl.cnf
    start explorer.exe c:\openssl\bin
    
    echo Welcome to OpenSSL
    
    openssl
    
    ) else (
    
    echo Error: openssl.cnf was not found
    echo File openssl.cnf needs to be present in c:\openssl\share
    pause
    
    )
    
    exit
    
  3. Una vez que haya descargado los binarios de OpenSSL, extráigalos a su unidad C en una carpeta titulada OpenSSL. (La ruta debe ser C: \ OpenSSL). No mueva ninguno de los contenidos de la carpeta, simplemente extráigalo a la carpeta.
  4. Está listo para usar OpenSSL. Esta es una excelente solución para los usuarios de Windows que no tienen los privilegios para instalarlo, ya que no requiere permisos. Simplemente ejecute el archivo bat de antes haciendo doble clic en él.

2

El problema aquí es que NO HAY un archivo openssl.cnf proporcionado con el material openssl de GnuWin32. Tienes que crearlo. Puede averiguar CÓMO crear un archivo openssl.cnf yendo aquí:

http://www.flatmtn.com/article/setting-ssl-certificates-apache

Donde se lo explica todo sobre cómo hacerlo.

TENGA EN CUENTA: El comando openssl proporcionado con la barra invertida al final es para UNIX. Para Windows: 1) Elimine la barra invertida y 2) Mueva la segunda línea hacia arriba para que quede al final de la primera línea. (Entonces obtienes solo un comando).

TAMBIÉN: Es MUY importante leer los comentarios. Es posible que desee realizar algunos cambios en función de ellos.


2

Tuve el mismo problema en Windows. Se resolvió estableciendo la variable de entorno de la siguiente manera:

Nombre de la variable: OPENSSL_CONF Valor de la variable: C: (Directorio OpenSSl) \ bin \ openssl.cnf


1

Si ves un error como

error en la línea -1 c: apacheconfopenssl.cnf

intente cambiar de barra invertida a barra inclinada frontal en -config.



0

Ejecute el comando como administrador y copie el archivo de configuración en algún lugar donde tenga derechos de lectura y especifique la ruta con el parámetro -config.


0

Sé que esto es antiguo, pero pensé que otros que suceden en esto (y usan Visual Studio) podrían beneficiarse. Leí esto en otra publicación que parece que no puedo encontrar.

Abra su configuración en notepad ++ y asegúrese de que su codificación sea UTF-8 (es decir, no UTF-8-BOM *).

Esto me habría ahorrado muchas búsquedas / errores de prueba ...


0

Sé que esta pregunta es antigua, pero así es como la resolví.

Copié el openssl.cnfarchivo del bindirectorio al directorio principal que está en C:/Openssl/openssl.cnflugar de C:/Openssl/bin/openssl.cnfy funcionó bien.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.