OpenSSL和读取openssl.conf文件时出错


119

我正在运行Windows XP 32位

我只是从以下URL下载了Openssl并安装了它。 http://www.slproweb.com/products/Win32OpenSSL.html

然后我尝试使用以下命令创建一个自签名证书

openssl req -x509 -days 365 -newkey rsa:1024 -keyout hostkey.pem -nodes -out hostcert.pem

然后开始出现以下错误

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

然后在谷歌搜索一段时间后,我将上述命令更改为

openssl req -config C:\OpenSSL\bin\openssl.conf -x509 -days 365 -newkey rsa:1024 -keyout hostkey.pem -nodes -out hostcert.pem

但是现在我在命令提示符下收到以下错误

C:\ OpenSSL \ bin \ openssl.conf
4220 -1行上的错误:错误:02001002:系统库:fopen:无此类文件或目录:。\ crypto \ bio \ bss_file.c:126:fopen('C: \\ OpenSSL \ bin \ openssl.conf','rb')4220:错误:2006D080:BIO例程:BIO_new_file:无此类文件:。\ crypto \ bio \ bss_file.c:129:
4220:错误:0E078072:配置文件例程:DEF_LOAD:没有这样的文件:。\ crypto \ conf \ conf_def.c:197:

请帮忙。提前致谢。


3
检查确切的文件名:openssl.conf ---> openssl.cnf
标记

2
Windows上的文件扩展名现在是.cfg。还要确保指定的文件路径(在命令行或环境变量OPENSSL_CONF中)不在引号内。
tatx

文件扩展名(.cnf / .cfg)似乎有所不同,具体取决于用于安装OpenSSL的文件。在WampServer v3.2.2安装上,我只是配置文件名是openssl.cnf。我还使用Shining Path Productions的二进制文件进行了Window10 64位安装。该安装中的文件名为openssl.cfg。OpenSSL配置文件扩展名中的这种差异似乎与编译有关。我尚未测试OpenSSL v1.1.1g可以识别哪个扩展名。
比尔·瓦朗斯

Answers:


140

在Windows上,您还可以设置环境属性OPENSSL_CONF。例如,在命令行中,您可以输入:

set OPENSSL_CONF=c:/libs/openssl-0.9.8k/openssl.cnf

要验证它,您可以键入:

echo %OPENSSL_CONF%

您还可以将其设置为计算机环境变量的一部分,以便默认情况下所有用户和服务都可以使用它。见,例如,在Windows NT环境变量如何在Windows XP中管理环境变量

现在,您可以运行openssl命令,而不必传递config location参数。


9
谢谢,为我工作!(set OPENSSL_CONF = c:\ openssl-win32 \ bin \ openssl.cfg)
Valentin Heinitz 2014年

@jww尝试过此操作,但它告诉我set是无效命令。有任何想法吗?
莎拉(Sarah)

3
@Sarah- set是Windows命令,它应从运行cmd.exe。它不适用于非Windows计算机。该setecho的事情不会在电源外壳上运作。您将使用类似的东西$X=1; Write-Output $X
jww

@jww谢谢。我在Windows计算机上,但是我在openssl.exe中而不是cmd.exe中使用该命令。它可以正常工作,但是在openssl.exe中仍然出现相同的错误,提示“无法从错误的路径/ssl/openssl.cnf加载配置信息”,因此我尝试了以下解决方案,在您的openssl目录中添加了-config参数,完美的工作。所以我很高兴 感谢您的帮助:)
萨拉

应该标记为答案。坦白说也应该没有必要。例如,为什么此OpenSSL Windows发行版不简单地默认为PWD?
stonedauwg,

40

只需在命令行中添加参数-config c:\your_openssl_path\openssl.cfg,即可更改your_openssl_path为实际安装路径。


太好了,一直关注此博客帖子ajden.towfeek.se/post/… 并添加-config也适用于cygwin,例如,$ openssl ca -in server.csr -config /etc/ssl/openssl.cnf 但为什么-config没有在man openssl中列出呢? openssl.org/docs/apps/openssl.html
barlop

@nneonneo尝试了上述解决方案,但它告诉我set和config是无效命令。有任何想法吗?
莎拉(Sarah)

该设置仅适用于Windows;config不是独立的命令(您可以将其附加到OpenSSL命令行中)。
nneonneo

29

只需在第4步中自己创建一个openssl.cnf文件即可:http : //www.flatmtn.com/article/setting-openssl-create-certificates

链接停止工作后进行编辑 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
不再找到网址
Greg Domjan


14

如果您已将Apache与OpenSSL一起安装,请导航至bin目录。在我的情况下,D:\ apache \ bin。

*如果您独立安装了openssl,这些命令也将起作用。

运行以下命令:

openssl req -config d:\apache\conf\openssl.cnf -new -out d:\apache\conf\server.csr -keyout d:\apache\conf\server.pem
openssl rsa -in d:\apache\conf\server.pem -out d:\apache\conf\server.key
openssl x509 -in d:\apache\conf\server.csr -out d:\apache\conf\server.crt -req -signkey d:\apache\conf\server.key -days 365

* 这将创建可用于开发目的的自签名证书

同样,如果您在httpd.conf中安装了Apache,请遵循以下步骤:

  <IfModule ssl_module>
    SSLEngine on
    SSLCertificateFile "D:/apache/conf/server.crt"
    SSLCertificateKeyFile "D:/apache/conf/server.key"
  </IfModule>

提出这个问题的人清楚地表明他正在使用Win32OpenSSL。Apache的资料来自哪里?它与问题有什么关系?
jww

3
当然,安装单独提供的或与Apache一起提供的OpenSSL是同一回事。我添加了Apache位,因为在95%的情况下,在Windows上安装OpenSSL的原因是因为它将与Apache一起使用。
ArturKędzior2014年

这很有用,因为XAMPP在Apache文件夹中包含OpenSSL。
Jimmy Adaro

像魅力一样工作!
Divyesh Prajapati

12

只需尝试以管理员身份运行openssl.exe。


2
您不必以管理员身份运行这些命令即可使用它们。更好地解决潜在问题。
jww

如果已将其安装到系统驱动器上的程序文件目录中,则需要以提升的权限运行该命令,否则您没有写权限。
CodeManX 2014年

1
这对我有用。我不知道为什么要尝试访问C:\Program Files\Common Files\SSL/openssl.cnf,然后突然以管理员身份运行时,它不在乎找不到它(也没有创建文件),但这对我有用,所以我不在乎要么。
Simon_Weaver

7

使用Apache for Windows bin文件夹中的openssl.exe只是出现了类似的错误。我在openssl.cnf文件的路径中输入了-config标志,并输入了错字。我想你会发现

openssl req -config C:\OpenSSL\bin\openssl.conf -x509 -days 365 -newkey rsa:1024 -keyout hostkey.pem -nodes -out hostcert.pem

应该

openssl req -config "C:\OpenSSL\bin\openssl.cnf" -x509 -days 365 -newkey rsa:1024 -keyout hostkey.pem -nodes -out hostcert.pem

注意:conf可能应该是cnf


4

如果openssl安装成功,请在c驱动器中搜索“ OPENSSL”以找到配置文件并设置路径。

set OPENSSL_CONF=<location where cnf is available>/openssl.cnf

它对我有用。


3

这个解决方法对我们的工作(技术支持)有很大帮助,我们制作了一个简单的批处理文件,可以在任何地方运行(我们没有安装该文件的权限)。此解决方法将设置变量,然后为您运行OpenSSL。它还会为您打开bin文件夹(因为这将保存您创建或修改的任何文件)。此外,这仅适用于Windows。

设置方法:

  1. 此处下载OpenSSL二进制文件。(请注意,这已确认可用于0.9.8h版。)
  2. 将此代码复制到名为StartOpenSSL.bat的文件中。将此保存到您选择的位置。它可以在任何地方运行。

    @echo off
    title OpenSSL
    
    cd\openssl\bin
    
    if exist "C:\openssl\share\openssl.cnf" (
    
    set OPENSSL_CONF=c:/openssl/share/openssl.cnf
    start explorer.exe c:\openssl\bin
    
    echo Welcome to OpenSSL
    
    openssl
    
    ) else (
    
    echo Error: openssl.cnf was not found
    echo File openssl.cnf needs to be present in c:\openssl\share
    pause
    
    )
    
    exit
    
  3. 下载OpenSSL二进制文件后,将它们解压缩到C驱动器的一个名为OpenSSL的文件夹中。(路径必须为C:\ OpenSSL)。不要移动任何文件夹内容,只需将它们提取到文件夹中即可。
  4. 您已经准备好使用OpenSSL。对于没有特权安装它的Windows用户来说,这是一个很好的解决方法,因为它不需要任何权限。只需通过双击运行bat文件即可。

2

这里的问题是,没有GnuWin32 openssl东西给出的openssl.cnf文件。您必须创建它。您可以通过以下方法找到如何创建一个openssl.cnf文件:

http://www.flatmtn.com/article/setting-ssl-certificates-apache

它在哪里为您提供了如何做的一切。

请注意:结尾处带有反斜杠的openssl命令适用于UNIX。对于Windows:1)删除反斜杠,然后2)向上移动第二行,使其位于第一行的末尾。(因此,您只有一个命令。)

还:阅读这些评论非常重要。您可能希望根据它们进行一些更改。


2

我在Windows上遇到了同样的问题。通过将环境变量设置如下来解决该问题:

变量名称:OPENSSL_CONF变量值:C:(OpenSSl目录)\ bin \ openssl.cnf


1

如果您看到错误,例如

-1行上的错误c:apacheconfopenssl.cnf

尝试在-config中从反斜杠更改为正斜杠。



0

以管理员身份运行命令,并将配置文件复制到您具有读取权限的位置,并使用-config参数指定路径。


0

我知道这很古老-但认为在此上发生的其他事情(并使用Visual Studio)可能会受益。我在另一本找不到的文章上阅读了此文章。

在notepad ++中打开您的配置,并确保其编码为UTF-8(即不是UTF-8-BOM *)。

这将为我节省很多搜索/尝试错误信息...


0

我知道这个问题很老,但是这是我解决的方法。

我将openssl.cnf文件从bin目录复制到C:/Openssl/openssl.cnf而不是父目录,C:/Openssl/bin/openssl.cnf并且工作正常。

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.