我需要从CSR中提取主题备用名称。是否有其他方法可以提取它,而不是使用“-text”在“openssl req -in test.csr -text -noout”中?(也许类似于-subject参数?)
我注意到SAN有时被格式化为“电子邮件”,因此grep DNS实际上无法正常工作。您可以推荐任何命令以正确获取SubjAltName吗?
我注意到SAN有时被格式化为“电子邮件”,因此grep DNS实际上无法正常工作。您可以推荐任何命令以正确获取SubjAltName吗?
openssl req -in test.csr -text -noout | grep DNS
$ openssl req -in example-com.req.pem -text -noout | grep DNS
DNS:example.com, DNS:www.example.com, DNS:mail.example.com, DNS:ftp.example.com
这个方法可行是因为通用名称(CN)只是自由格式文本。SAN中的名称实际上是GeneralName
,它们有几种不同的类型:
GeneralName ::= CHOICE {
otherName [0] OtherName,
rfc822Name [1] IA5String,
dNSName [2] IA5String,
x400Address [3] ORAddress,
directoryName [4] Name,
ediPartyName [5] EDIPartyName,
uniformResourceIdentifier [6] IA5String,
iPAddress [7] OCTET STRING,
registeredID [8] OBJECT IDENTIFIER }
DNS
前缀是OpenSSL的req
在遇到dNSName
时打印的内容。对于所有(像我一样)遇到困难的人,我发现了这种方法:
openssl x509 -noout -text -in certificate.pem|grep -A1 'X509v3 Subject Alternative Name'|tail -n1