在 UCC/SAN SSL 证书上列出域名

在 UCC/SAN SSL 证书上列出域名

有没有办法列出 SAN/UCC SSL 证书上的所有域(最好使用 linux/os x 上的命令行)?

显然,一定有某种方法可以提取数据,因为浏览器可以做到这一点。不幸的是,我可以看到列表,但无法剪切和粘贴它。

答案1

openssl x509 -text < $CERT_FILE

#=>

. . .
                DNS: . . .
. . .

其中$CERT_FILE可以有.pem.crt扩展名。

用于查看证书文件并检查是否可以找到证书和密钥文件匹配的 Shell 函数这里

答案2

您可以使用此命令列出域(在 Linux 上测试):

cat cert.pem | openssl x509 -text | grep DNS

答案3

如果你只是想SANgrep DNS:就是显而易见的解决方案。

如果您想要一个更清晰的列表以便进一步处理,您可以使用这个 Perl 正则表达式来提取名称:@names=/\sDNS:([^\s,]+)/g

例如:

true | openssl s_client -connect example.com:443 2>/dev/null \
| openssl x509 -noout -text \
| perl -l -0777 -ne '@names=/\bDNS:([^\s,]+)/g; print join("\n", sort @names);'

输出内容如下:

example.com
example.edu
example.net
example.org
www.example.com
www.example.edu
www.example.net
www.example.org

因此你可以将其传输到while read name; do echo "processing $name ..."; done等等。

或者对于一行中的逗号分隔列表,替换join("\n",join(",",

-0777perl 的开关使其一次读取整个输入而不是逐行读取)

答案4

这将显示证书中的所有备用域(目前所有浏览器都需要)

openssl x509 -text -noout < fullchain.pem | grep DNS

答案是这样的

DNS:*.example.ru, DNS:example.ru

相关内容