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


183

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


3
所有答案都表明,必须以某种方式引用配置文件openssl.cnf。但是没有人提及什么配置文件?谁创造的?它的内容是什么?
joedotnot

Answers:


170

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

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

在Powershell中:

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

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


16
在版本1.0.1j上,我不得不使用它C:\OpenSSL-Win32\bin\openssl.cfg
凯文·潘科

7
或在
64位

13
C:\Program Files (x86)\Git\ssl\openssl.cfg对于那些已经使用git的人。
kspearrin

您在哪里/如何设置此值?
matthew_360 '16

这会将其置于您用户的启动环境中:SETX OPENSSL_CONF c:/libs/openssl-0.9.8k/openssl.cnf
Ross Presser

78

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

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

36
-config C:\ OpenSSL-Win64 \ bin \ openssl.cnf
TimK

4
从slproweb.com/products/Win32OpenSSL.html下载的1.0.1e版本中openssl.cfg,安装后bin目录中仅存在该文件。但是有了这个文件,它似乎仍然可以工作。
vanje 2013年

9
如果您使用的是Git随附的OpenSSL,则可以尝试-config "C:\Program Files (x86)\Git\ssl\openssl.cnf"
Joel B

2
openssl:Error:'-config'是无效的命令。你们如何设置?
benez 2015年

1
@kewlbfy有关在何处使用该-config标志的信息,请参见@Kosar的答案,这对我
有用

35

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

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

当然,如果您使用 GnuWin32


20

在Windows中,[ 类似情况 ]

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

我做了以下,对我有用。

一旦安装了OpenSSL,在系统重新启动后,Ran命令将以管理员身份提示。[为达到最佳效果,我同时执行了这两项操作。

做了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它的工作对我来说。

我提到了此链接,以寻求帮助。

谢谢。


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

15

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

希望对您有所帮助。


1
尝试过这里列出的所有其他解决方案后,该解决方案为我工作。一旦配置被创建(在openssl.exe目录中),您就可以运行openssl req -new -x509 -key privatekey.pem -out publickey.cer -days 365 -config openssl.cnf
Jimbo

12

安装OpenSSL之后,您需要重新启动计算机并使用Run As Administrator。然后它的作品。


11

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

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

9

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

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

工作完美。



4

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

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

3

如果您使用的是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

1

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

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

“ OPENSSL库配置

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

要启用库配置,默认部分需要包含一条指向主配置部分的适当行。默认名称是openssl实用程序使用的openssl_conf。其他应用程序可以使用其他名称,例如myapplication_conf。所有库配置行均显示在配置文件开头的默认部分中。

配置部分应包含一组名称值对,其中包含特定的模块配置信息。该名称表示配置模块的名称。该值的含义是模块特定的:例如,它可以表示包含配置模块特定信息的另一个配置部分。例如:”

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

是模板文件,您可以从中生成带有特定条目的openssl.cnf。

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

此外,如果您需要以编程方式访问.cnf文件,则可以包括相应的标头--openssl / conf.h-并使用以下命令解析.cnf文件

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

是“ CONF_modules_load_file”的文档;


0

对我来说,在调用之前先把变量放了一下:

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

0

在Windows Powershell上:

$env:OPENSSL_CONF = "${env:ProgramFiles}\OpenSSL-Win64\bin\openssl.cfg"
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.