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

Вопрос или проблема

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

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

openssl x509 -text < $CERT_FILE

#=>

. . .
                DNS: . . .
. . .

где $CERT_FILE может иметь расширение .pem или .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 "обработка $name ..."; done и т.д.

Или для списка, разделённого запятыми, в одной строке, замените join("\n", на join(",",

(Опция -0777 для perl заставляет его читать весь ввод за раз, а не построчно)

если вы хотите ограничить зависимости до openssl, grep, sed и tr и при этом получить легко анализируемый / итерабельный вывод:

  • разделённый пробелами список:
    $ openssl x509 -text -in cert.pem | grep DNS | sed s/DNS://g | tr -d ' ' | tr , ' '
    

    вывод:

    example.com example.org www.example.com www.example.org
    
  • разделённый переносами строк список:
    $ openssl x509 -text -in cert.pem | grep DNS | sed s/DNS://g | tr -d ' ' | tr , \\n
    

    вывод:

    example.com
    example.org
    www.example.com
    www.example.org
    
  • разделённый запятыми список:
    $ openssl x509 -text -in cert.pem | grep DNS | sed s/DNS://g | tr -d ' '
    

    вывод:

    example.com,example.org,www.example.com,www.example.org
    

что здесь происходит?

  • openssl x509 -text -in cert.pem выводит информацию о сертификате в читаемом формате
  • grep DNS извлекает строки, содержащие строку: DNS
  • sed s/DNS://g удаляет все вхождения: DNS:
  • tr -d ' ' удаляет все пробелы
  • tr , ' ' заменяет все запятые на пробелы
  • tr , \\n заменяет все запятые на переносы строк
  • | оператор пайп передает стандартный вывод от команды перед пайпом к стандартному вводу команды после него

Это покажет все альтернативные домены в сертификате (необходимые для всех браузеров сегодня)

openssl x509 -text -noout < fullchain.pem | grep DNS

Ответ будет выглядеть так

DNS:*.example.ru, DNS:example.ru

Многие из этих ответов используют перенаправление вывода, хотя openssl имеет свои собственные инструменты для поиска файла. В эти дни, обычно используя Letsencrypt, вы будете использовать fullchain.pem как файл-ссылку в директории domain.tld/, которую вы хотите проверять.

Это некоторые полезные основные команды, которые могут избежать | и < перемещения ввода и перенаправления с использованием -in для обозначения исходного файла:

openssl x509 -text -in fullchain.pem

Чтобы избежать вывода всего сертификата в файл, используйте -noout:

openssl x509 -text -noout -in fullchain.pem

Чтобы изолировать строку, в которой перечислены применимые домены, да, направьте в grep с | grep DNS:

openssl x509 -text -noout -in fullchain.pem | grep DNS:

Ответ или решение

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

Сертификаты SAN (Subject Alternative Name) или UCC (Unified Communications Certificate) используются для защиты нескольких доменных имен с помощью одного сертификата. Методом, который обеспечит вам извлечение списка доменных имен из сертификата SSL, является использование команды openssl. В этой статье мы рассмотрим, как это сделать, с учетом возможных конфигураций файлов.

Использование OpenSSL для извлечения доменных имен

Существует несколько способов вывести список доменных имен из сертификата SSL с использованием командной строки в системах Linux и macOS. Все приведенные ниже команды ориентированы на работу с сертификатами в формате PEM (.pem) или CRT (.crt).

  1. Базовая команда для отображения сертификата:

    openssl x509 -text -in <cert_file>

    Здесь <cert_file> — это файл вашего сертификата, например, cert.pem или fullchain.pem. Команда выдаст все детали сертификата в человекочитаемом формате.

  2. Фильтрация по доменным именам:
    Чтобы получить только строки, содержащие доменные имена, вы можете использовать grep:

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

    Это затребует все строки, где есть тег DNS, что содержит все альтернативные доменные имена.

Упрощение вывода

Если вам нужно улучшить вывод для дальнейшей обработки, можно использовать дополнительные инструменты, такие как sed и tr.

  1. Пробелами разделенные выводы:

    openssl x509 -text -in cert.pem | grep DNS | sed 's/DNS://g' | tr -d ' ' | tr , ' '

    Этот вариант очистит вывод, оставив только доменные имена, разделенные пробелами.

  2. Вывод в виде новых строк:

    openssl x509 -text -in cert.pem | grep DNS | sed 's/DNS://g' | tr -d ' ' | tr , '\n'

    Используя этот подход, каждый домен будет выводиться на новой строке.

  3. Вывод через запятую:

    openssl x509 -text -in cert.pem | grep DNS | sed 's/DNS://g' | tr -d ' '

    Если вы хотите получить домены в виде строки, разделенной запятыми, данный вариант будет наиболее подходящим.

Пример получения доменных имен из SSL-сертификата

Для извлечения доменных имен из сертификата на удаленном сервере можно воспользоваться следующей командой:

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);'

Этот пример подключается к серверу через s_client, извлекает сертификат и, с помощью Perl, форматирует домены для удобного чтения.

Заключение

Извлечение доменных имен из сертификата SAN/UCC SSL может быть выполнено с использованием базовых и продвинутых инструментов командной строки. Это позволяет вам фильтровать, систематизировать и обрабатывать необходимую информацию по мере необходимости. Важно помнить, что с помощью команды openssl можно управлять сертификатами эффективно, проверяя соответствие и достоверность использования SSL в ваших проектах.

Теперь, когда у вас есть полное руководство, вы можете легко найти и обработать доменные имена из сертификатов SSL, что является критически важным для обеспечения безопасности ваших веб-приложений и сервисов.

Оцените материал
Добавить комментарий

Капча загружается...