我需要从CSR中提取主题备用名称。除了在openssl req -in test中使用"-text"之外,有什么方法可以提取它.csr-text -noout?(也许与 -subject 参数类似?
我注意到SAN有时被格式化为"电子邮件",因此grep DNS实际上不能很好地工作。您是否可以推荐任何命令来正确获取SubjAltName?
我需要从 CSR 中提取主题备用名称...
如果您查看要<openssl dir>/apps/req.c
的源代码,您会发现没有什么可以提取的,只有 SAN。但您可以执行以下操作:
openssl req -in test.csr -text -noout | grep DNS
下面是测试 CSR 上的输出:
$ 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
SAN 值位于(A1 grep 标志)行"X509v3..."之后的一行,尾部命令会剪切除最后一行(具有 SAN 值的行)之外的所有内容。