OpenSSL 从 Windows bat 脚本生成 .cnf,错误:配置文件中未指定对象

OpenSSL 从 Windows bat 脚本生成 .cnf,错误:配置文件中未指定对象

我在尝试使用 openSSL 针对 Windows 2012R2 AD CS CA 生成证书时遇到了一些困难。

我的 bat 脚本要求输入一些内容,并使用它们为该特定请求生成一个 .cnf 文件。当我运行脚本并打开 .cnf 文件时,我看到以下内容,这些内容看起来都是正确的:

[ req ]
default_bits       = 2048
distinguished_name = req_distinguished_name
req_extensions     = req_ext
[ req_distinguished_name ]
countryName                 = US
stateOrProvinceName         = Michigan
localityName               = Detroit
organizationName           = LEI
commonName                 = nas.lei.com
[ req_ext ]
subjectAltName = @alt_names
[alt_names]
DNS.1 = nas.lei.com
DNS.2 = 192.168.1.15
DNS.3 = 

到目前为止一切顺利,bat 脚本生成此文件后,它会调用以下 openSSL 命令:

openssl req -out TEMP/%_CNAME%.req -newkey rsa:2048 -nodes -keyout TEMP/%_CNAME%.key -config TEMP/%_CNAME%.cnf

OpenSSL 执行其操作并开始向我提供如下输出:

----
You are about to based to enter information that will be incorporated into your certificate request.
For some fields there will be a default value,
If you enter '.', the field will be left blank.
----
US []:
Michigan []:
etc...

事情就是从这里开始出问题的。如果我只是通过字段输入并接受 .cnf 文件中的默认值,我会得到以下信息:

error, no objects specified in config file. Problems making Certificate Request

现在,如果我返回并且不只是输入我的默认设置,假设我设置了以下内容:

US []: US

然后它接受我的 .cnf 文件,不会生成错误,但会生成无效的 CSR,在这种情况下,CSR 中显示的唯一项目是 Country=US。

我无法解决这个问题,我以为这是一个编码问题,但当我在 notepad++ 中检查文件时,它是 UTF-8 编码的。有人有什么建议吗?

以下是生成.cnf文件的bat脚本部分:

REM Create .cnf file
@echo off
@echo [ req ]> TEMP/%_CNAME%.cnf
@echo default_bits       = 2048>> TEMP/%_CNAME%.cnf
@echo distinguished_name = req_distinguished_name>> TEMP/%_CNAME%.cnf
@echo req_extensions     = req_ext>> TEMP/%_CNAME%.cnf
@echo [ req_distinguished_name ]>> TEMP/%_CNAME%.cnf
@echo countryName                 = US>> TEMP/%_CNAME%.cnf
@echo stateOrProvinceName         = Michigan>> TEMP/%_CNAME%.cnf
@echo localityName               = Detroit>> TEMP/%_CNAME%.cnf
@echo organizationName           = LEI>> TEMP/%_CNAME%.cnf
@echo commonName                 = %_DNS%>> TEMP/%_CNAME%.cnf
@echo [ req_ext ]>> TEMP/%_CNAME%.cnf
@echo subjectAltName = @alt_names>> TEMP/%_CNAME%.cnf
@echo [alt_names]>> TEMP/%_CNAME%.cnf
@echo DNS.1 = %_DNS%>> TEMP/%_CNAME%.cnf
@echo DNS.2 = %_DNS2%>> TEMP/%_CNAME%.cnf
@echo DNS.3 = %_DNS3%>> TEMP/%_CNAME%.cnf

答案1

您使用的参数是提示,它们定义如下,您可以将它们保留为以下值:

countryName                     = Country Name (2 letter code)
stateOrProvinceName             = State or Province Name (full name)
localityName                    = Locality Name (eg, city)
0.organizationName              = Organization Name (eg, company)
commonName                      = Common Name (eg, your name or your server\'s hostname)

您应该重命名这些参数:

countryName                 = US
stateOrProvinceName         = Michigan
localityName               = Detroit
organizationName           = LEI
commonName                 = nas.lei.com

进入:

countryName_default             = US
stateOrProvinceName_default     = Michigan
localityName_default            = Detroit
0.organizationName_default      = LEI
commonName_default              = nas.lei.com

在您的系统中查找openssl.cnf并查看:

相关内容