Есть ли способ перечислить все домены в сертификате SSL SAN / UCC (в идеале с помощью командной строки в linux / os x)?
Очевидно, должен быть какой-то способ извлечения данных, поскольку браузеры могут это делать. К сожалению, я вижу список, но не могу вырезать и вставить его.
openssl x509 -text < foo.crt
должен сделать свое дело.
Вы можете перечислить домены с помощью этой команды (проверено на Linux):
cat cert.pem | openssl x509 -text | grep DNS
Если ты просто хочешь видеть 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(",",
(The -0777
переключатель для perl позволяет читать весь ввод сразу, а не построчно)