![OpenSSL 从 Windows bat 脚本生成 .cnf,错误:配置文件中未指定对象](https://linux22.com/image/737961/OpenSSL%20%E4%BB%8E%20Windows%20bat%20%E8%84%9A%E6%9C%AC%E7%94%9F%E6%88%90%20.cnf%EF%BC%8C%E9%94%99%E8%AF%AF%EF%BC%9A%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6%E4%B8%AD%E6%9C%AA%E6%8C%87%E5%AE%9A%E5%AF%B9%E8%B1%A1.png)
我在尝试使用 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
并查看: