在 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 加载配置信息
在 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 加载配置信息
安装 OpenSSL 后,我需要创建一个新的环境变量:
OPENSSL_CONF
C:\Program Files\OpenSSL\openssl.cnf
在 powershell 中:
$env:OPENSSL_CONF = "${env:ProgramFiles}\OpenSSL\openssl.cnf"
此值与以前的安装版本不同(如本文之前的编辑中所示)。另外,不要忘记将 openssl 二进制文件夹添加${env:ProgramFiles}\OpenSSL
到您的路径中。
您应该指定配置的绝对路径,如下所示:
openssl req -x509 -config "C:\OpenSSL-Win64\bin\openssl.cnf" ...
在 Windows 10 中,无需重新启动或以管理员模式运行,而是像这样设置 openssl 配置:
set OPENSSL_CONF=C:\Program Files (x86)\GnuWin32\share\openssl.cnf
当然,如果你正在使用GnuWin32
在这种情况下,唯一对我有用的是自行创建的 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
我希望这会有所帮助。
在 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
但提示我输入 server.key 的Pass Phrase它对我有用。
我提到,这个链接为我提供帮助。
谢谢你。
安装 OpenSSL 后,您需要重新启动计算机并使用Run As Administrator
. 然后它的作品。
使用 GnuWin32 工具,我在 C:\gnuwin32\share 下找到了 openssl.cnf
set OPENSSL_CONF=C:\gnuwin32\share\openssl.cnf
对于 Windows 8 上的我,我只是找到了 openssl.cnf 文件并将其复制到 C 驱动器上。然后:
openssl req -new -key server.key -out server.csr -config C:\openssl.cnf
工作完美。
在 Windows 7 中,我不必重新启动,只需在管理员模式下运行命令提示符即可。
就我而言,我需要使用选项在命令上手动设置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
关于为什么找不到 openssl 的基本问题:简短回答:openssl 的一些安装包预先包含了默认的 openssl.cnf。其他包没有。在后一种情况下,您将包括下面显示的链接中的一个;您可以根据需要输入其他用户特定信息--DN 名称等。
从https://www.openssl.org/docs/manmaster/man5/config.html,我直接引用:
“OPENSSL 库配置
应用程序可以使用主 OpenSSL 配置文件或可选的替代配置文件自动配置 OpenSSL 的某些方面。openssl 实用程序包括此功能:任何子命令都使用主 OpenSSL 配置文件,除非在子命令中使用选项来使用替代配置文件。
要启用库配置,默认部分需要包含指向主配置部分的适当行。默认名称是 openssl_conf,由 openssl 实用程序使用。其他应用程序可能会使用其他名称,例如 myapplication_conf。所有库配置行都出现在配置文件开头的默认部分中。
配置部分应该由一组包含特定模块配置信息的名称值对组成。name 代表配置模块的名称。该值的含义是特定于模块的:例如,它可以表示包含配置模块特定信息的进一步配置部分。例如:”
因此,似乎必须根据您的专有名称 (DN) 以及特定于您使用的其他条目自行配置 openssl.cnf。
这是模板文件,您可以从中生成带有特定条目的 openssl.cnf。
一个应用程序实际上有一个包含演示 .cnf 文件的演示安装。
此外,如果您需要以编程方式访问 .cnf 文件,您可以包含适当的标头 --openssl/conf.h-- 并使用解析您的 .cnf 文件
CONF_modules_load_file(const char *filename, const char *appname,
unsigned long flags);
这是“CONF_modules_load_file”的文档;
如果您使用的是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
在 Windows Powershell 上:
$env:OPENSSL_CONF = "${env:ProgramFiles}\OpenSSL-Win64\bin\openssl.cfg"
我在 Windows 7 上遇到了类似的问题:
WARNING: can't open config file: C:\OpenSSL-Win32\bin\openssl.cfg
Unable to load config info from C:\OpenSSL-Win32\bin\openssl.cfg
原因是在OpenSSL-Win32
没有使用卸载程序的情况下删除了目录,因此并非所有组件都已从系统中正确删除。我不得不手动删除环境变量。OPENSSL_CONF
一些openssl二进制文件,例如用git安装的,不需要OPENSSL_CONF
环境变量,但如果这个环境变量存在,它必须指向有效的文件。
对我来说,在调用之前放置变量就可以了:
OPENSSL_CONF=/usr/ssl/openssl.cnf openssl req -new -x509 -key privatekey.pem -out publickey.cer -days 365