无法从 Windows 上的 /usr/local/ssl/openssl.cnf 加载配置信息

Posted

技术标签:

【中文标题】无法从 Windows 上的 /usr/local/ssl/openssl.cnf 加载配置信息【英文标题】:Unable to load config info from /usr/local/ssl/openssl.cnf on Windows 【发布时间】:2013-01-05 17:08:26 【问题描述】:

在 Windows 上使用 OpenSSL 时:

openssl genrsa -out privatekey.pem 1024 -->

创建成功

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

错误信息显示为

无法从 /usr/local/ssl/openssl.cnf 加载配置信息

【问题讨论】:

所有答案都表明必须以某种方式引用配置文件 openssl.cnf.. 但是没有人提到什么配置文件,??谁创造了它,??它的内容是什么? 【参考方案1】:

我在 Windows 7 上遇到过类似问题:

WARNING: can't open config file: C:\OpenSSL-Win32\bin\openssl.cfg
Unable to load config info from C:\OpenSSL-Win32\bin\openssl.cfg

原因是在没有使用卸载程序的情况下删除了OpenSSL-Win32 目录,因此并非所有组件都已从系统中正确删除。 我不得不手动删除环境变量OPENSSL_CONF

一些 openssl 二进制文件,例如用git安装,不需要OPENSSL_CONF环境变量,但是如果这个环境变量存在,则必须指向有效文件。

【讨论】:

【参考方案2】:

在 Windows Powershell 上:

$env:OPENSSL_CONF = "$env:ProgramFiles\OpenSSL-Win64\bin\openssl.cfg"

【讨论】:

【参考方案3】:

关于为什么找不到 openssl 的基本问题: 简短回答:openssl 的一些安装包预先包含了默认的 openssl.cnf。其他包没有。 在后一种情况下,您将包括下面显示的链接中的一个; 您可以根据需要输入其他用户特定信息 --DN 名称等。

来自https://www.openssl.org/docs/manmaster/man5/config.html,I直接引用:

"OPENSSL 库配置

应用程序可以使用主 OpenSSL 配置文件或可选的替代配置文件自动配置 OpenSSL 的某些方面。 openssl 实用程序包含此功能:任何子命令都使用主 OpenSSL 配置文件,除非在子命令中使用选项来使用替代配置文件。

要启用库配置,默认部分需要包含指向主配置部分的适当行。默认名称是 openssl_conf,由 openssl 实用程序使用。其他应用程序可能会使用其他名称,例如 myapplication_conf。所有库配置行都出现在配置文件开头的默认部分中。

配置部分应该由一组包含特定模块配置信息的名称值对组成。 name 代表配置模块的名称。该值的含义是模块特定的:例如,它可以表示包含配置模块特定信息的进一步配置部分。例如:”

因此看来必须根据您的需要自行配置 openssl.cnf 专有名称 (DN),以及其他特定于您使用的条目。

Here 是您可以从中生成 openssl.cnf 的模板文件 与您的具体条目。

One Application 实际上有一个包含演示 .cnf 文件的演示安装。

此外,如果您需要以编程方式访问 .cnf 文件,您可以 包括适当的标题 --openssl/conf.h-- 并解析您的 .cnf 文件 使用

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

Here 是“CONF_modules_load_file”的文档;

【讨论】:

除了死链接...这个答案很棒,因为它揭示了文件不存在的原因有时。搜索我的机器,我发现了其他软件附带的几个 openssl.cnf 文件,例如GitHub、VisualStudio 等以及其中任何一个的副本都运行良好,但我也必须在我的 openssl 命令行中包含 -config openssl.cnf。另请注意,出现了(显然不相关的)警告“警告:无法打开配置文件:/usr/local/ssl/openssl.cnf”,这在 Windows 机器上并不太令人惊讶。尽管如此,证书已正确创建。【参考方案4】:

在这种情况下,唯一对我有用的是自行创建的 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

希望对你有帮助。

【讨论】:

已经尝试了这里列出的所有其他解决方案,这个对我有用。创建配置后(在 openssl.exe 目录中),您可以运行 openssl req -new -x509 -key privatekey.pem -out publickey.cer -days 365 -config openssl.cnf【参考方案5】:

安装 OpenSSL 后,我需要创建一个新的环境变量:

姓名:OPENSSL_CONF 值:C:\Program Files\OpenSSL\openssl.cnf

在PowerShell中:

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

此值与之前的安装版本不同(如本文之前的编辑中所示)。另外,不要忘记将 openssl 二进制文件夹 $env:ProgramFiles\OpenSSL 添加到您的路径中。

【讨论】:

在 1.0.1j 版本上,我不得不改用 C:\OpenSSL-Win32\bin\openssl.cfg 或 64 位系统中的 C:\OpenSSL-Win64\bin\openssl.cfg 或者C:\Program Files (x86)\Git\ssl\openssl.cfg 对于那些已经使用 git 的人。 你在哪里/如何设置这个值? 这会将它放在您用户的启动环境中:SETX OPENSSL_CONF c:/libs/openssl-0.9.8k/openssl.cnf【参考方案6】:

在 Windows 7 中我不必重新启动,只需在管理员模式下运行命令提示符即可。

【讨论】:

【参考方案7】:

安装OpenSSL后,需要重启电脑并使用Run As Administrator。然后它的作品。

【讨论】:

【参考方案8】:

如果您使用的是 Win32 OpenSSL v1.1.0g,请设置此环境变量:

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

在使用 "server.key" 运行此命令之前,成功创建 "server.csr"

openssl req -new -key server.key -out server.csr

【讨论】:

【参考方案9】:

就我而言,我需要使用config 选项在命令上手动设置openssl.cnf 文件的路径。所以命令

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

【讨论】:

【参考方案10】:

在 Windows 10 中,无需重新启动或以管理员模式运行,而是像这样设置 openssl 配置:

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

当然,如果你使用的是GnuWin32

【讨论】:

【参考方案11】:

您应该指定配置的绝对路径,如下所示:

openssl req -x509 -config "C:\OpenSSL-Win64\bin\openssl.cnf" ...

【讨论】:

-config C:\OpenSSL-Win64\bin\openssl.cnf 在从slproweb.com/products/Win32OpenSSL.html 下载的1.0.1e 版本中,安装后bin 目录中只有openssl.cfg 文件。但是有了这个文件,它似乎仍然可以工作。 如果你使用 Git 提供的 OpenSSL,那么你可以试试-config "C:\Program Files (x86)\Git\ssl\openssl.cnf" openssl:Error: '-config' 是无效命令。你们是怎么设置的? @kewlbfy 请参阅下面的@Kosar 答案,了解在哪里使用-config 标志,这对我有用【参考方案12】:

对我来说,在调用之前放置变量就可以了:

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

【讨论】:

【参考方案13】:

对于 Windows 8 上的我,我只是找到了 openssl.cnf 文件并将其复制到 C 驱动器上。那么:

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

完美运行。

【讨论】:

【参考方案14】:

使用 GnuWin32 工具,我在 C:\gnuwin32\share 下找到了 openssl.cnf

set OPENSSL_CONF=C:\gnuwin32\share\openssl.cnf

【讨论】:

【参考方案15】:

在 windows 中,[类似场景]

我遇到了同样的问题,但这是在请求证书签名请求期间。

我做了以下,它对我有用。

安装 OpenSSL 后,在系统重新启动后以管理员身份运行命令提示符。[为了做到最好,我同时以管理员身份运行并重新启动系统]

确实, 1.【错误案例】

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

警告:无法打开配置文件:C:\OpenSSL-Win64\bin\openssl.cnf 和 无法从 C:\OpenSSL-Win64\bin\openssl.cnf 加载配置信息

2.[使用警告]

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

[警告信息]:警告:无法打开配置文件:C:\OpenSSL-Win64\bin\openssl.cnf

但提示我为 server.key 输入 Pass Phrase 它对我有用

我转介这个link 为我提供帮助。

谢谢。

【讨论】:

谢谢,你提供的链接对我帮助很大:akadia.com/services/ssh_test_certificate.html

以上是关于无法从 Windows 上的 /usr/local/ssl/openssl.cnf 加载配置信息的主要内容,如果未能解决你的问题,请参考以下文章

Mac上的jenkins,PATH没有设置正确,没有/ usr / local / bin

一次解决MySQL无法启动的全过程

ImportError:无法从“集合”(/usr/local/lib/python3.10/collections/__init__.py)导入名称“MutableMapping”

如何在 Mac 上的 $PATH 中添加 /usr/local/bin

ARM macOS Monterey 上的 /usr/local/bin 损坏

警告:PATH 中不安全的世界可写目录 /usr/local/bin,模式 040777