无法在Windows上打开配置文件:/usr/local/ssl/openssl.cnf

171

我已安装了 OpenSSL 64。我想为我的 Node.js HTTPS 服务器使用证书。我运行了以下命令:

openssl genrsa -out subdomain.domain.com.key 1024

但是我遇到了错误:
WARNING: can't open config file: /usr/local/ssl/openssl.cnf
Loading 'screen' into random state - done
Generating RSA private key, 1024 bit long modulus
.........++++++
.........................................++++++
unable to write 'random state'
e is 65537 (0x10001)

我该如何解决这个问题?这个命令正确吗?

创建一个文本文件并将其命名为openssl.cnf。 文件的示例内容:http://www.flatmtn.com/article/setting-openssl-create-certificates#SSLCert-4 - simhumileco
1
Stackoverflow帖子:https://dev59.com/hWYq5IYBdhLWcg3weAej#43630802 - simhumileco
7个回答

297

解决方案是运行以下命令:

set OPENSSL_CONF=C:\OpenSSL-Win32\bin\openssl.cfg   
或者
set OPENSSL_CONF=[path-to-OpenSSL-install-dir]\bin\openssl.cfg
在使用openssl命令之前,请在命令提示符中设置其配置文件.cfg的位置。否则,您可以在Windows环境变量中设置同样的变量OPENSSL_CONF
注意:当使用Shining Light Productions的OpenSSL二进制分发版(官方免费下载和使用的编译+安装版本)时,可能会出现这种情况。此分发版被“半官方地”从OpenSSL网站链接,作为“主要面向没有预编译OpenSSL软件包的操作系统的服务”。

1
确保创建一个用户变量。在我的情况下,创建系统变量并不能解决这个问题。 - birken25
3
无法正常工作,我已在控制台中检查了 OPENSSL_CONF 变量并设置了它。 - Paul-Sebastian Manole
3
如果你的路径中有空格,尝试将其用引号括起来:set "OPENSSL_CONF=C:\OpenSSL Win32\bin 123\openssl.cfg" - NoOne
如果将其创建为系统变量,则必须获取新的cmd提示符。现有的cmd会话不会使用对系统变量的更改更新其环境。 - matty
2
我必须将上述命令中的 cfg 更改为 cnf - Post Impatica
显示剩余3条评论

25

我在Apache2.4.4上启用了SSL,并执行了以下代码,完成了重要的事情:
set OPENSSL_CONF=C:\wamp\bin\apache\Apache2.4.4\conf\openssl.cnf

然后执行其他的代码...


1
这对我在Windows 2008 R2上使用Win64OpenSSL_Light-1_1_0c +1有效。 - Cyclonecode

11

/usr/local/ssl/openssl.cnf

这样的路径意味着该程序是使用Cygwin或MSYS编译的。如果您必须使用此openssl,则需要一种理解这些路径的解释器,例如由Cygwin或MSYS提供的Bash。

另一个选择是下载或编译Windows本地版本的openssl。使用它,程序将需要类似于以下路径:

C:\Users\Steven\ssl\openssl.cnf

哪个更适合命令提示符。


不,我认为这意味着它是使用OPENSSLDIR编译的:"/usr/local/ssl"。我的是使用cl.exe编译的 openssl version -f compiler: cl -D_USING_V110_SDK71_ [..] - Paul-Sebastian Manole

8

解决方案!

只需正确设置-config参数的位置,例如:

openssl ....................  -config C:\bin\apache\apache2.4.9\conf\openssl.cnf

5
这适用于 "openssl req" 但不适用于 "openssl pkcs12"。环境变量对两者都有效。奇怪的是,pkcs12选项没有包含 -config 开关。 - GarDavis
有趣的是... openssl req 在这里忽略了 -config(Apache/2.4.10 Win64),但设置 OPENSSL_CONF 却可以正常工作。 - Álvaro González

7

在我的情况下,我使用了Shining Light的二进制文件,环境变量已经更新。但是仍然存在问题,直到我以管理员权限运行命令窗口。

打开CMD窗口时,请确保以管理员身份运行它。(右键单击“开始”菜单中的命令提示符,选择“以管理员身份运行”)

我认为由于用户账户控制,它无法读取文件。


1
以管理员身份运行命令并执行 set OPENSSL_CONF= 命令解决了我的问题。谢谢! - Caspian Canuck

3

不确定.cfg和.cnf之间的区别是什么。 在我的服务器上,我找不到.cfg或.cnf文件。 我创建了一个新文件(链接)并将其放置在以下文件夹中:/usr/local/ssl/bin

执行了

.\openssl genrsa -des3 -out <key name>.key 2048 

进展顺利...


1

1
那就是我下载的地方,本来想说它存在OP描述的问题,但在遵循Xero会计建议安装后重新启动电脑后,我发现它可以正常工作,没有任何问题。 - Jon

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