OpenSSL 和读取 OpenSSL.conf 文件的错误

我正在运行 Windows xp 32位

我刚刚从下面的 URL 下载并安装了 Opensl。 Http://www.slproweb.com/products/win32openssl.html

然后我尝试使用以下命令创建一个自签名证书

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

然后它开始出现以下错误

Unable to load config info from /usr/local/ssl/openssl.cnf

在谷歌了一下之后,我将上面的命令更改为

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

但是现在我在命令提示符中得到了以下错误

error on line -1 of C:\OpenSSL\bin\openssl.conf
4220:error:02001002:system library:fopen:No such file or
directory:.\crypto\bio\bss_file.c:126:fopen('C:\OpenSSL\bin\openssl.conf','rb')
4220:error:2006D080:BIO routines:BIO_new_file:no such file:.\crypto\bio\bss_file.c:129:
4220:error:0E078072:configuration file routines:DEF_LOAD:no such file:.\crypto\conf\conf_def.c:197:
439749 次浏览

在步骤4: http://www.flatmtn.com/article/setting-openssl-create-certificates中自己创建 openssl.cnf 文件,如下所示

链接停止工作后编辑 Cnf 文件的内容如下:

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

如果您已经安装了带 OpenSSL 的 Apache,请导航到 bin 目录。

* 如果您单独安装了 openssl,那么这些命令也可以工作。

运行以下命令:

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

* 这将创建可用于开发目的的自签名证书

如果您已经在 httpd.conf 中安装了 Apache,请再次粘贴以下内容:

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

我在使用 Apache for windows bin 文件夹中的 openssl.exe 时也出现了类似的错误。我在 openssl.cnf 文件的路径中指定了-config 标志。你会发现的

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

应该是

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

注意: 保密应该是 Cnf

在 Windows 上,您还可以设置环境属性 OPENSSL_CONF:

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

你可以输入:

echo %OPENSSL_CONF%

您还可以将其设置为计算机环境变量的一部分,以便所有用户和服务在默认情况下都可以使用它。看,例如,Windows NT 中的环境变量如何在 WindowsXP 中管理环境变量

现在您可以运行 openssl 命令,而无需传递配置位置参数。

只要以管理员身份运行 openssl.exe 即可。

只需在命令行中添加参数 -config c:\your_openssl_path\openssl.cfg,将 your_openssl_path更改为实际安装的路径。

set OPENSSL_CONF=c:/{path to openSSL}/bin/openssl.cfg

注意正确的扩展(翻译而不是 cnf) !

我已经从这里安装了 OpenSSL: http://slproweb.com/products/Win32OpenSSL.html

如果您看到一个错误,比如

第 -1行错误 c: apacheconfopenssl.cnf

尝试在-config 中从后斜杠更改为前斜杠。

这里的问题是,没有给出 GnuWin32 openssl 的 openssl.cnf 文件。你必须创造它。你可以在这里找到如何创建 openssl.cnf 文件:

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

它会告诉你该怎么做。

请注意: 末尾带有反斜杠的 openssl 命令用于 UNIX。对于 Windows: 1)删除反斜杠,2)将第二行向上移动,使其位于第一行的末尾。(所以你只能得到一个命令。)

另外: 通读评论是非常重要的。您可能希望根据它们进行一些更改。

如果 OPENSSL 安装成功,则在 c 驱动器中搜索“ OPENSSL”以找到配置文件并设置路径。

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

我成功了。

以管理员身份运行该命令,并将配置文件复制到具有读取权限的位置,并使用-config 参数指定路径。

这个变通方法对我的工作(技术支持)帮助很大,我们做了一个简单的批处理文件,我们可以在任何地方运行(我们没有权限安装它)。这个解决方案将设置变量,然后为您运行 OpenSSL。它还为您打开 bin 文件夹(因为这是您创建或修改的任何文件将被保存的位置)。此外,这仅适用于 Windows。

如何安装:

  1. 下载 OpenSSL 二进制文件 给你(注意,已经确认可以使用0.9.8 h 版本)
  2. 将此代码复制到名为 StartOpenSSL.bat 的文件中。保存到您选择的位置。它可以从任何地方运行。

    @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. Once you have downloaded the OpenSSL binaries, extract them to your C drive in a folder titled OpenSSL. (The path needs to be C:\OpenSSL). Do not move any of the folders contents around, just extract them to the folder.
  4. You are ready to use OpenSSL. This is a great workaround for Windows users who dont have the privileges to install it as it requires no permissions. Just run the bat file from earlier by double clicking it.

Https://github.com/xgqfrms-gildata/app001/issues/3

  1. 首先,确保在正确的路径中有一个 openssl.cnf文件;
  2. 如果您找不到它,只需 下载一,并复制到您的设置路径。
$ echo %OPENSSL_CONF%


$ set OPENSSL_CONF=C:\OpenSSL\bin\openssl.cnf

我知道这是老的-但认为其他发生在此(并使用 VisualStudio)可能受益。我在另一篇我似乎找不到的帖子上读到了这个。

在记事本 + + 中打开您的配置,并确保它的编码是 UTF-8(即,不是 UTF-8-BOM *)。

这可以省去我很多搜索/试验和错误..。

我在 Windows 上也遇到过同样的问题,解决方法是设置环境变量如下:

变量名: OPENSSL _ CONF 变量值: C: (OpenSSl Directory) bin OpenSSl.cnf

我知道这个问题很老了,但我是这样解决的。

我将 openssl.cnf文件从 bin目录复制到父目录,即 C:/Openssl/openssl.cnf而不是 C:/Openssl/bin/openssl.cnf,并且工作得很好。

我也面临着同样的问题。下面是解决它的步骤。

  1. 检查你的 openssl 版本

Openssl 版本

  1. 如果您的版本如下

OpenSSL 1.1.1 h 22 Sep 2020 OpenSSL 1.1.1 h 22 Sep 2020

  1. 到下面的链接下载最新的完整版本的 openssl。 Windows Installer
  2. 安装后,在系统路径的“ PATH”变量顶部添加 openssl 路径。
  3. 通过在步骤1中打开新的命令提示符和运行命令来确认您的版本是最新的
  4. 现在您已经准备好再次运行该命令,这一次它将工作。

如果您在 Windows 上与 Git 一起安装了 OpenSSL,那么将下面的命令添加到您的命令中:

-config "C:\Program Files\Git\usr\ssl\openssl.cnf"