OpenSSL 和读取 openssl.conf 文件时出错

Posted

技术标签:

【中文标题】OpenSSL 和读取 openssl.conf 文件时出错【英文标题】:OpenSSL and error in reading openssl.conf file 【发布时间】:2011-11-13 16:57:58 【问题描述】:

我正在运行 windows xp 32 位

我刚刚从以下 URL 下载了 Openssl 并安装了它。 http://www.slproweb.com/products/Win32OpenSSL.html

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

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

然后它开始给出以下错误

无法从 /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

但现在我在命令提示符中收到以下错误

C:\OpenSSL\bin\openssl.conf 的 -1 行出错 4220:错误:02001002:系统库:fopen:没有这样的文件或 目录:.\crypto\bio\bss_file.c:126:fopen('C:\OpenSSL\bin\openssl.conf','rb') 4220:错误:2006D080:BIO 例程:BIO_new_file:没有这样的 文件:.\crypto\bio\bss_file.c:129: 4220:错误:0E078072:配置文件例程:DEF_LOAD:没有这样 文件:.\crypto\conf\conf_def.c:197:

请帮忙。 提前致谢。

【问题讨论】:

检查确切的文件名:openssl.conf ---> openssl.cnf Windows 上的文件扩展名现在是 .cfg。还要确保指定的文件路径(在命令行或环境变量 OPENSSL_CONF 中)不在引号内。 文件扩展名 (.cnf/.cfg) 似乎因用于安装 OpenSSL 的内容而异。在 WampServer v3.2.2 安装上,我刚刚做了配置文件名是 openssl.cnf。我还使用 Shining Path Productions 的二进制文件安装了 Window10 64 位。该安装中的文件名为 openssl.cfg。 OpenSSL 配置文件扩展名的这种差异似乎与编译有关。我还没有测试 OpenSSL v1.1.1g 可以识别哪个扩展名。 您可能还想将 hostcert 文件扩展名更改为 .crt 或 .cer? 我们应该检查我们的安装,我安装了openssl lite,它没有这个配置文件。现在我正在使用 git 的 ssl,更多内容在这里 ***.com/questions/50625283/… 【参考方案1】:

在 Windows 上,您还可以设置环境属性 OPENSSL_CONF。例如,您可以从命令行键入:

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

要验证它,您可以键入:

echo %OPENSSL_CONF%

您还可以将其设置为计算机环境变量的一部分,以便所有用户和服务默认使用它。例如,请参阅 Environment variables in Windows NT 和 How To Manage Environment Variables in Windows XP。

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

【讨论】:

谢谢,为我工作! (设置 OPENSSL_CONF=c:\openssl-win32\bin\openssl.cfg) @jww 试过这个,但它告诉我 set 是一个无效的命令。有什么想法吗? @Sarah - set 是一个 Windows 命令,它的意思是从 cmd.exe 运行。它不适用于非 Windows 机器。 setecho 在 Power Shell 中也不起作用。你会使用类似$X=1; Write-Output $X的东西。 @jww 谢谢。我在 Windows 机器上,但我在 openssl.exe 而不是 cmd.exe 中使用该命令。我阅读了您的评论并转到 cmd.exe 并在那里键入了 set 命令。它工作正常,但我仍然在 openssl.exe 中遇到同样的错误,说“无法从 wrong_path/ssl/openssl.cnf 加载配置信息”所以我尝试了下面的解决方案,说在你的 openssl 目录中添加参数 -config 和效果很好。所以我很高兴。感谢您的帮助:) 应该标记为答案。坦率地说也应该是不必要的。例如,为什么这个 OpenSSL Windows 发行版不简单地默认为 PWD?【参考方案2】:

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

【讨论】:

太棒了,一直关注这篇博文 ajden.towfeek.se/post/… 并添加 -config 也适用于 cygwin,例如$ openssl ca -in server.csr -config /etc/ssl/openssl.cnf 但是为什么 -config 没有在 man openssl 中列出? openssl.org/docs/apps/openssl.html @nneonneo 尝试了这个和上面的解决方案,但它告诉我 set 和 config 是无效的命令。有什么想法吗? set 仅适用于 Windows; config 不是一个独立的命令(你将它附加到你的 OpenSSL 命令行)。【参考方案3】:

只需在第 4 步中像这样自己创建一个 openssl.cnf 文件:http://www.flatmtn.com/article/setting-openssl-create-certificates

链接停止工作后编辑 openssl.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

【讨论】:

【参考方案4】:
set OPENSSL_CONF=c:/path to openSSL/bin/openssl.cfg

注意正确的扩展名(openssl.cfg不是cnf)!

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

【讨论】:

安装链接有帮助,我从其他地方下载了 0.9.8,但无法正常工作。谢谢。【参考方案5】:

如果您使用 OpenSSL 安装了 Apache,请导航到 bin 目录。在我的情况下 D:\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>

【讨论】:

提问者明确表示他使用的是Win32OpenSSL。 Apache 的东西是从哪里来的?它与问题有什么关系? 当然是的,安装单独或Apache自带的OpenSSL是一回事。我添加了 Apache 位,因为在 95% 的情况下,在 Windows 上安装 OpenSSL 的原因是因为将与 Apache 一起使用。 这很有用,因为 XAMPP 在 Apache 文件夹中包含 OpenSSL。【参考方案6】:

尝试以管理员身份运行 openssl.exe。

【讨论】:

您不必以管理员身份运行这些命令即可使其正常工作。最好解决根本问题。 如果安装在系统盘的程序文件目录下,需要提升权限运行命令,否则没有写权限。 这对我有用。我不知道为什么它试图访问C:\Program Files\Common Files\SSL/openssl.cnf,然后当突然以管理员身份运行时它不在乎它找不到它(也没有创建文件)但这对我有用所以我不也不在乎。【参考方案7】:

我刚刚使用 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

注意:conf 应该是 cnf

【讨论】:

【参考方案8】:

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

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

【讨论】:

【参考方案9】:

如果openssl安装成功,在c盘搜索“OPENSSL”找到配置文件并设置路径。

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

这对我有用。

【讨论】:

【参考方案10】:

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

如何设置:

    下载 OpenSSL 二进制文件here。 (请注意,这已确认适用于 0.9.8h 版本。)

    将此代码复制到名为 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
    
    下载 OpenSSL 二进制文件后,将它们解压到 C 盘上名为 OpenSSL 的文件夹中。 (路径需要是 C:\OpenSSL)。不要移动任何文件夹内容,只需将它们解压缩到文件夹中即可。 您已准备好使用 OpenSSL。对于没有权限安装它的 Windows 用户来说,这是一个很好的解决方法,因为它不需要权限。只需双击运行之前的 bat 文件即可。

【讨论】:

【参考方案11】:

我在 Windows 上遇到了同样的问题。通过如下设置环境变量解决:

变量名称:OPENSSL_CONF 变量值:C:(OpenSSl目录)\bin\openssl.cnf

【讨论】:

【参考方案12】:

这里的问题是 GnuWin32 openssl 的东西没有给出 openssl.cnf 文件。你必须创造它。您可以前往此处了解如何创建 openssl.cnf 文件:

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

它为您详细介绍了如何操作。

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

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

【讨论】:

【参考方案13】:

如果您看到类似

的错误

-1 行错误 c:apacheconfopenssl.cnf

尝试在 -config 中将反斜杠更改为正斜杠。

【讨论】:

【参考方案14】:

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

【讨论】:

【参考方案15】:

https://github.com/xgqfrms-gildata/App001/issues/3

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

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

【讨论】:

OpenSSL & node.js 找不到 C:\OpenSSL\ @SnehalDwivedi 请按照我描述的步骤操作。【参考方案16】:

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

我将openssl.cnf 文件从bin 目录复制到父目录C:/Openssl/openssl.cnf 而不是C:/Openssl/bin/openssl.cnf 并且工作正常。

【讨论】:

【参考方案17】:

我知道这是旧的 - 但认为发生在此(并使用 Visual Studio)的其他人可能会受益。我在另一篇似乎找不到的帖子上读到了这篇文章。

在 notepad++ 中打开您的配置并确保其编码为 UTF-8(即,不是 UTF-8-BOM*)。

这会为我节省很多搜索/试验错误...

【讨论】:

【参考方案18】:

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

    检查您的 openssl 版本

openssl 版本

    如果您的版本低于

OpenSSL 1.1.1h 2020 年 9 月 22 日

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

【讨论】:

以上是关于OpenSSL 和读取 openssl.conf 文件时出错的主要内容,如果未能解决你的问题,请参考以下文章

我实践:自建CA及证书颁发(openssl)

openssl创建私有CA

使用openssl创建包含SAN的证书

Nginx编译配置脚本篇- 动态库配置脚本auto/lib/conf

sh 使用openssl conf从https://gist.github.com/dwallraff/c1ed31291ac7cf19304b创建自签名SSL证书或CSR的命令

HttpsOpenSSL自建CA证书及签发证书nginx单向认证双向认证及使用Java访问