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

212

在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 加载配置信息。


11
所有答案都表明某种方式必须引用配置文件 openssl.cnf.. 但是没有人提及哪个配置文件,由谁创建,以及其内容是什么? 所有答案都表明需要参考配置文件 openssl.cnf。但是没有人提到具体是哪个配置文件,由谁创建,以及它的内容是什么? - joedotnot
15个回答

197

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

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

在 Powershell 中:

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

这个值与之前的安装版本不同(如在此帖子的先前编辑中看到)。此外,不要忘记将openssl二进制文件夹${env:ProgramFiles}\OpenSSL添加到您的路径中。


16
在版本1.0.1j中,我必须使用"C:\OpenSSL-Win32\bin\openssl.cfg"。 - Kevin Panko
8
在64位系统中,或者是在C:\OpenSSL-Win64\bin\openssl.cfg文件中。 - borjab
14
或者对于已经安装了Git的用户,可以使用C:\Program Files (x86)\Git\ssl\openssl.cfg - kspearrin
这将把它放在用户的启动环境中: SETX OPENSSL_CONF c:/libs/openssl-0.9.8k/openssl.cnf - Ross Presser
在我的Windows安装中,路径为“C:\Program Files (x86)\GnuWin32\share\openssl.cnf”。 - Rafael Araújo
显示剩余3条评论

101

你应该指定配置文件的绝对路径,例如:

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

37
配置文件路径:C:\OpenSSL-Win64\bin\openssl.cnf - TimK
4
在从http://slproweb.com/products/Win32OpenSSL.html下载的1.0.1e版本中,在安装后的bin目录中只有文件`openssl.cfg`。但是,即使有这个文件,似乎也可以正常工作。 - vanje
9
如果您正在使用 Git 提供的 OpenSSL,则可以尝试 -config "C:\Program Files (x86)\Git\ssl\openssl.cnf" - Joel B
2
openssl:错误:'-config' 是无效命令。你们是怎么设置的? - benez
1
@kewlbfy,请查看下面 @Kosar 的答案,了解在哪里使用 -config 标志,这对我很有效。 - danjah

43

在Windows 10中,无需重新启动或以管理员模式运行,而是需要将openssl配置设置为以下方式:

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

当然,如果你正在使用GnuWin32


27

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

我希望那能有所帮助。


3
在尝试了这里列出的所有其他解决方案之后,这个解决方案对我起作用了。一旦在openssl.exe目录中创建了配置文件,您就可以运行openssl req -new -x509 -key privatekey.pem -out publickey.cer -days 365 -config openssl.cnf - Jimbo

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

但是它提示我输入服务器密钥的密码短语,这对我来说有效

我参考了这个链接以获得帮助。

谢谢。


谢谢,您提供的链接对我非常有帮助:http://www.akadia.com/services/ssh_test_certificate.html - leole

12
安装OpenSSL后,您需要重新启动计算机并使用“以管理员身份运行”。然后它就可以工作了。

12

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

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

运行完美。


11

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

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

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

6

在我的情况下,我需要手动使用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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接