Очередная задачка — выбрать все домены/серты на сервере, которые используют self-signed сертификаты. В моем случае, это сервер с isp4 плюс nginx/ssl на борту.

Естественным инструментом для этого будет — openssl. В обдумывании алгоритма парсинга, я пришел к выводу, что самым оптимальным вариантом будет искать сертификаты, в регистрационных данных которых не указано конкретной страны, т.е. выглядит так:

Issuer: C=XX, ST=XX, L=XX, O=XX, OU=XX/emailAddress=EMAIL, CN=DOMAIN

Далее дело техники:

for i in `grep -ri ".crt" /etc/nginx/nginx.conf | awk '{print $2}' | cut -d';' -f1 `; do openssl x509 -in $i -text -noout |grep "Issuer: C=XX"; done

Поясняю, одной командой, мы выделяем все сертификаты присутствующие в конфиге nginx-а (попутно обрезая лишние части строки), после чего в цикле на каждый файл натравливаем openssl, который в свою очередь расшифровывает серт и грепаем нужную нам строку.  Voila!

Таким образом мы получаем список строк, каждая из которых содержит имя домена.

Конечно же метод не слишком универсальный, во-первых, имя домена для которого сгенерен сертификат и для которого он установлен — могут отличаться, во-вторых, в случае ручной генерации ssl, или просто нестандартных вариантов, country может иметь значение отличающееся от XX, и при этом все равно быть самоподписным.  Наверняка найдется еще с десяток кейсов, для которых не подходит данный вариант решения, но в моем случае этого оказалось достаточно и я не стал усложнять, а доработать методику, вплоть до превращения одной строки из баша в монструозный скрипт с кучей фич — дело времени и желания 😉

Удачи!

 

ЗЫ

Будут вопросы по допиливанию под ваши нужды — пишите, помогу по мере сил в решении.