Как я могу просканировать IP и Диапазон портов для получения информации обо всех используемых сертификатах SSL

От системы Linux для данного диапазона IP я должен проверить каждый открытый порт, чтобы видеть, используется ли сертификат SSL. Например, я хотел бы проверить порты 1 - 9999 на диапазоне адресов 192.168.22.0/24. Если бы открытый порт использует сертификат SSL, я хотел бы получить имя CN, дату истечения срока, и т.д... Я нашел много инструментов, которые проверят общие порты как 443 или 8443, но я должен найти сертификаты SSL используемыми на нестандартных портах. Любые предложения инструмента или совет ценятся.Спасибо.

-1
задан 11 August 2014 в 22:41
2 ответа

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

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

Этот сценарий займет некоторое время, так как он работает по умолчанию openssl timeout, но получит даты, эмитента и субъекта (и, наконец, порт, где он его нашел) каждого "по умолчанию" сертификата сервера. Закройте его другим циклом, чтобы сделать диапазон IP, но это займет вечность.

for (( i=1; i<10000; i++ )) ; do openssl s_client  -connect SITENAME:$i </dev/null 2>/dev/null | awk 'BEGIN {a=0} /BEGIN CERT/ {a=1} (a>0) {print} /END CERT/ {a=0}' | openssl x509 -noout -subject -issuer -dates 2>/dev/null && echo On port $i; done
1
ответ дан 5 December 2019 в 19:55

По соглашению, приложения используют определенные порты, когда они зашифрованы (например, http - 80, https - 443). Поэтому вы не будете сканировать все порты, а просто будете проверять, не использует ли приложение зашифрованные порты. Например:

nmap -sT -p 443 -oG – 192.168.1.0/24 | grep open

Замените 443 на порт, используемый вашим приложением для зашифрованных соединений. Также, замените 192.168.1.0/24 на целевую спецификацию, которую вы бы хотели использовать.

Для получения сертификата вы бы использовали команду вот так:

openssl s_client -showcerts -connect host.host:9999 </dev/null

Замена хоста. host:9999 с определенным хостом и портом, который вам нужен.

Если вам нравится, вы можете использовать эту команду на любой комбинации хоста и порта, но будьте готовы долго ждать на машине, если вы действительно собираетесь сканировать все порты на компьютере. Больше, если вы хотите сделать это для многих компьютеров в сети. 65k - это большое число, и сетевые операции начинаются медленно, но я подозреваю, что это потребует таймаута для каждого порта, так что подход дробовика на самом деле вообще неосуществим; вам нужно будет значительно сузить пул портов, чтобы проверить.

.
0
ответ дан 5 December 2019 в 19:55

Теги

Похожие вопросы