OpenSSL:如何创建具有空主题 DN 的证书?

OpenSSL:如何创建具有空主题 DN 的证书?

是否可以创建仅在主题备用名称属性/扩展中包含识别信息的 PKCS#10 证书请求/X.509 证书?根据X.509 4.1.2.6 主题,对于主体不是 CA 的证书,只要 subjectAltName 至关重要,则主体可以为空。

但是当我使用带有空的 distinguished_name 部分的这个配置文件时:

# request.config
[ req ]
distinguished_name = req_distinguished_name
req_extensions = v3_req
prompt = no

[ req_distinguished_name ]

[ v3_req ]
keyUsage = nonRepudiation, digitalSignature, keyEncipherment
subjectAltName=critical,email:[email protected]

和命令

openssl genrsa 1024 > key.pem
openssl req -new -key key.pem -out req.pem -config request.config

OpenSSL 抱怨:

error, no objects specified in config file
problems making Certificate Request

答案1

这对我有用:

test-no-cn.cnf 文件

[req] 
default_bits       = 4096
encrypt_key        = no
default_md         = sha256
distinguished_name = req_distinguished_name
req_extensions = v3_req

[ req_distinguished_name ]

[ v3_req ]
keyUsage = nonRepudiation, digitalSignature, keyEncipherment
subjectAltName=critical,email:[email protected],URI:http://example.com/,IP:192.168.7.1,dirName:dir_sect

[dir_sect]
C=DK
O=My Example Organization
OU=My Example Unit
CN=My Example Name

生成 CSR

openssl req -new -newkey rsa:4096 -nodes -config test-no-cn.cnf -subj "/" -outform pem -out test-no-cn.csr -keyout test-no-cn.key

签署 CSR

openssl x509 -req -days 365 -in test-no-cn.csr -signkey test-no-cn.key -out test-no-cn.crt -outform der -extensions v3_req -extfile test-no-cn.cnf

查看生成的证书

openssl x509 -inform der -in test-no-cn.crt -noout -text

答案2

我也遇到了这个“未指定对象”错误。它针对各个字段显示如下提示:

US []:

我只是按下回车键,因为我已经在 .cnf 文件中设置了这些值。结果我需要再次输入所有值,然后它就成功了。

答案3

问题出prompt = no在原始配置中。假设openssl req您打算在配置文件中指定主题条目,并点击初步检查 req.c

有一个解决方法:删除prompt = no,改为添加-subj /openssl req命令行。这是一个生成 CSR 和自签名证书的示例脚本:

cat > openssl.cnf <<EOF
[ req ]
distinguished_name = req_distinguished_name
req_extensions = v3_req

[ req_distinguished_name ]

[ v3_req ]
keyUsage = nonRepudiation, digitalSignature, keyEncipherment
subjectAltName=critical,email:[email protected]
EOF
openssl req -newkey rsa:2048 -config openssl.cnf -nodes -new -subj "/" \
  -out req.csr
openssl req -newkey rsa:2048 -config openssl.cnf -nodes -new -subj "/" \
  -x509 -out cert.crt

答案4

似乎您可以从键盘上输入“distinguished_name”组中的任何一个值,而且它工作正常……我的意思是您不需要输入其他值,可以使用它们的默认值(如 openssl.conf 文件中所述)

[ req ]
...
distinguished_name = req_distinguished_name
prompt = no
...

Should work fine.

相关内容