在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后,需要重新启动计算机,并以管理员身份运行。那么它就起作用了。


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


你应该指定配置的绝对路径,就像这样:

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

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

名称:OPENSSL_CONF 取值范围:C:\Program Files\OpenSSL\ openssl.cnf

powershell:

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

这个值与以前的安装版本不同(如本文前面的编辑所示)。另外,不要忘记将openssl二进制文件夹${env:ProgramFiles}\ openssl添加到您的Path中。


在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 这对我很管用。

我提到了,这个链接需要我的帮助。

谢谢你!


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

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

对我来说,在Windows 8上,我只是找到了openssl.cnf文件,并将其复制到C盘。然后:

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

完美的工作。


对我来说,在调用之前放置变量是可行的:

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

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

我希望这对你有所帮助。


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

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

当然,如果你使用的是GnuWin32


在我的例子中,我需要使用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

如果你使用的是Win32 OpenSSL v1.1.0g,设置这个环境变量:

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

在运行此命令之前,先使用“server. exe”。Key”,成功创建server.csr:

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

关于为什么找不到openssl的基本问题: 简单回答:一些openssl的安装包预先包含了默认的openssl.cnf。其他包则不然。 在后一种情况下,你将包括一个下面所示的链接; 您可以根据需要输入额外的用户细节——DN名称等。

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

openssl库配置

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

要启用库配置,默认部分需要包含指向主配置部分的适当行。默认名称为openssl工具使用的openssl_conf。其他应用程序可能使用替代名称,例如myapplication_conf。所有库配置行都显示在配置文件开头的默认部分中。

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

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

下面是可以从中生成openssl.cnf的模板文件 用特定的元素。

一个应用程序实际上有一个演示安装,其中包含一个演示的.cnf文件。

此外,如果需要以编程方式访问.cnf文件,也可以这样做 包含适当的头文件——openssl/conf.h——并解析你的.cnf文件 使用

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

下面是“CONF_modules_load_file”的文档;


在Windows Powershell上:

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

我在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

原因是在没有使用deinstallator的情况下删除了OpenSSL-Win32目录,所以没有正确地从系统中删除所有组件。 我不得不手动删除环境变量OPENSSL_CONF。

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