列出UCC / SAN SSL证书上的域


15

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

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

Answers:


25

openssl x509 -text < foo.crt 应该可以。


3
为了后代,这是我使用的完整命令,因为我正在为另一台服务器执行此命令:openssl s_client -showcerts -connect www.example.org:443 | openssl x509 -text
Jordan Reiter 2012年

3
为了得到域的洁净空间分隔的列表,你可以通过它通过grep和sed中像这样openssl x509 -text < $CRT | grep 'DNS:' | sed 's/\s*DNS:\([a-z0-9.\-]*\)[,\s]\?/\1 /g'
杰弗里

请向下滚动:panticz.de的答案更好;-)
lucaferrario,

10

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

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

这个结果比公认的答案要好。
VaTo19年

是的,这应该是公认的答案。
卡尔

1

如果您只想查看 SAN,grep 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 的开关使它一次读取整个输入,而不是逐行读取)

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.