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


14

是否可以仅在主题备用名称属性/扩展名中创建带有标识信息的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:certtest@example.com

和命令

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

Answers:


11

这为我工作:

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:certtest@example.com,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

产生企业社会责任

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

签署企业社会责任

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

8

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

US []:

我只是按Enter键,因为我已经在.cnf文件中设置了这些值。事实证明,我需要再次键入所有值,然后它才能工作。


我必须做同样的事情。尽管将值放在配置文件中,它仍然提示我再次输入所有DN组件。我不得不重复一遍,但至少有效。
Nate W.

3
这是因为配置文件实际上没有包含默认值。C = US表示C的“提示”是“ US”,而不是默认值。相反,该文件应包含C = CountryC_default = US
jordanbtucker 2014年

5
哦,那只有在时prompt = yes [or blank]。如果是这样,prompt = noC = US意味着“ US”是默认值。
jordanbtucker 2014年

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:certtest@example.com
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

2

在openssl配置文件的策略部分中尝试“ commonName =可选”。


1

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

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

Should work fine.
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.