Jor*_*ter 17 certificate ssl-certificate ucc
有没有办法列出 SAN/UCC SSL 证书上的所有域(最好在 linux/os x 上使用命令行)?
显然必须有某种方法来提取数据,因为浏览器可以做到这一点。不幸的是,我可以看到列表但不能剪切和粘贴它。
Dan*_*tts 28
openssl x509 -text < foo.crt 应该做的伎俩。
请参阅https://gist.github.com/danpritts/2d596b8c01828e9f09329fa741d8838d了解用于查看证书文件和检查证书和密钥文件是否匹配的几个 shell 函数。
小智 12
您可以使用此命令列出域(在 linux 上测试):
cat cert.pem | openssl x509 -text | grep DNS
Run Code Online (Sandbox Code Playgroud)
如果您只想查看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);'
Run Code Online (Sandbox Code Playgroud)
这会输出:
example.com
example.edu
example.net
example.org
www.example.com
www.example.edu
www.example.net
www.example.org
Run Code Online (Sandbox Code Playgroud)
所以你可以通过管道将其传递给while read name; do echo "processing $name ..."; done等。
或者对于一行中以逗号分隔的列表,替换join("\n",为join(",",
(-0777perl 的开关使其立即读取整个输入,而不是逐行读取)