Если вы просто хотите увидеть 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(",",
( -0777
Переключатель для Perl заставляет его читать весь ввод сразу, а не построчно)
openssl s_client -showcerts -connect www.example.org:443 | openssl x509 -text