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

Sre*_*ram 113 windows configuration openssl environment-variables

我正在运行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
Run Code Online (Sandbox Code Playgroud)

然后它开始给出以下错误

无法从/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
Run Code Online (Sandbox Code Playgroud)

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

C:\ OpenSSL\bin\openssl.conf的第-1行错误
4220:错误: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:

请帮忙.提前致谢.

dvt*_*ver 136

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

set OPENSSL_CONF=c:/libs/openssl-0.9.8k/openssl.cnf
Run Code Online (Sandbox Code Playgroud)

要验证它,您可以输入:

echo %OPENSSL_CONF%
Run Code Online (Sandbox Code Playgroud)

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

现在您可以运行openssl命令而无需传递config location参数.

  • 谢谢,为我工作!(设置OPENSSL_CONF = c:\ openssl-win32\bin\openssl.cfg) (9认同)
  • @Sarah - `set`是一个Windows命令,它的意思是从`cmd.exe`运行.它不适用于非Windows机器.`set`和`echo`的东西在Power Shell中也不起作用.你会用[`$ X = 1; 写输出$ X`](http://stackoverflow.com/q/707646/608639). (2认同)

小智 37

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


Sam*_*Sam 26

只需在步骤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
Run Code Online (Sandbox Code Playgroud)

您仍然可以使用Waybackmachine找到该页面:https://web.archive.org/web/20171108102046/http://www.flatmtn.com/article/setting-openssl-create-certificates


Art*_*ior 12

如果已使用OpenSSL安装Apache,请导航到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
Run Code Online (Sandbox Code Playgroud)

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

再次,如果您在httpd.conf中安装了Apache,请执行以下操作:

  <IfModule ssl_module>
    SSLEngine on
    SSLCertificateFile "D:/apache/conf/server.crt"
    SSLCertificateKeyFile "D:/apache/conf/server.key"
  </IfModule>
Run Code Online (Sandbox Code Playgroud)

  • 当然,安装单独或与Apache一起使用的OpenSSL是一回事.我添加了Apache位,因为在95%的情况下,在Windows上安装OpenSSL的原因是因为它将与Apache一起使用. (3认同)

小智 12

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

  • 您不必以管理员身份运行这些命令即可使它们工作。最好是解决根本问题。 (2认同)
  • 这对我有用。我不知道为什么它试图访问 `C:\Program Files\Common Files\SSL/openssl.cnf` 然后突然以管理员身份运行时它不在乎它找不到它(并且创建文件)但这对我有用,所以我也不在乎。 (2认同)

小智 12

set OPENSSL_CONF=c:/{path to openSSL}/bin/openssl.cfg
Run Code Online (Sandbox Code Playgroud)

照顾正确的扩展(openssl.cfg而不是cnf)!

我从这里安装了OpenSSL:http://slproweb.com/products/Win32OpenSSL.html


She*_*ock 9

如果您在 Windows 上与 Git 一起安装了 OpenSSL,请将以下内容添加到您的命令中:

-config "C:\Program Files\Git\usr\ssl\openssl.cnf"
Run Code Online (Sandbox Code Playgroud)


Nic*_*ell 7

我使用Apache for windows bin文件夹中的openssl.exe发生了类似的错误.我有指定的-config标志在openssl.cnf文件的路径中有一个拼写错误.我想你会发现的

openssl req -config C:\OpenSSL\bin\openssl.conf -x509 -days 365 -newkey rsa:1024 -keyout hostkey.pem -nodes -out hostcert.pem
Run Code Online (Sandbox Code Playgroud)

应该

openssl req -config "C:\OpenSSL\bin\openssl.cnf" -x509 -days 365 -newkey rsa:1024 -keyout hostkey.pem -nodes -out hostcert.pem
Run Code Online (Sandbox Code Playgroud)

注意:conf应该是cnf.


小智 6

我在 Windows 上也遇到了同样的问题。通过设置环境变量解决了这个问题:

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