如何仅使用openssl命令从CSR中提取主题替代名称?
我需要从CSR中提取主题备选名称。除了在openssl req-in test.csr-text-noout中使用“-text”之外,还有其他方法可以提取这个吗?(可能与-subject参数类似?) 我注意到,SAN有时被格式化为“电子邮件”,因此grep DNS实际上无法正常工作。您是否可以推荐任何可以正确获取SubjectName的命令 我需要从CSR中提取主题备选名称 如果查看如何仅使用openssl命令从CSR中提取主题替代名称?,openssl,Openssl,我需要从CSR中提取主题备选名称。除了在openssl req-in test.csr-text-noout中使用“-text”之外,还有其他方法可以提取这个吗?(可能与-subject参数类似?) 我注意到,SAN有时被格式化为“电子邮件”,因此grep DNS实际上无法正常工作。您是否可以推荐任何可以正确获取SubjectName的命令 我需要从CSR中提取主题备选名称 如果查看/apps/req.c的源代码,您会发现没有什么可以提取的,只有SAN。但您可以执行以下操作: openssl r
/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 ::= 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 }
因此,当OpenSSL遇到一个dNSName
时,您正在搜索的DNS
前缀就是OpenSSL的req
打印的前缀。对于每个偶然发现这个前缀的人(像我一样),我发现如下方法:
openssl x509 -noout -text -in certificate.pem|grep -A1 'X509v3 Subject Alternative Name'|tail -n1
SAN值位于“X509v3…”行之后一行(A1 grep标志),tail命令会剪切除最后一行以外的所有行,即带有SAN值的行。我注意到SAN有时被格式化为“电子邮件”,因此grep DNS实际上无法正常工作。是否有任何命令可以推荐用于所有SAN?@Mark-如果您在SAN中有一个带有电子邮件地址的最终实体证书,听起来您有用户证书而不是服务器证书。此外,您可能希望继续提问,因为它会询问有关使用命令的问题。在那里你可以找到专家。堆栈溢出用于编程和开发问题和答案;不是企业社会责任:)……即。x509 vs要求