Перечисление доменов в SSL-сертификате UCC / SAN

15

Есть ли способ перечислить все домены в SSL-сертификате SAN / UCC (в идеале, используя командную строку в linux / os x)?

Ясно, что должен быть какой-то способ извлечь данные, так как это могут сделать браузеры. К сожалению, я вижу список, но не могу вырезать и вставить его.

Джордан Райтер
источник

Ответы:

25

openssl x509 -text < foo.crt должен сделать свое дело.

Дэн Приттс
источник
3
Для потомков это полная команда, которую я использовал, так как я делал это для другого сервера:openssl s_client -showcerts -connect www.example.org:443 | openssl x509 -text
Джордан Рейтер
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
panticz.de
источник
Этот дает лучший результат, чем принятый ответ.
VaTo
Да, это должен быть принятый ответ вместо этого.
Кал
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(",",

( -0777Переключатель для Perl заставляет его читать весь ввод сразу, а не построчно)

mivk
источник