I'm not sure if there's an automated way to do this.
First, I would list all the ports that are listening and match the ports to the process/executable (for example, with netstat -t -l -p
, as root to be able to see the process ID (PID)).
[РЕДАКТИРОВАТЬ]
Вы получите такие записи, где PID равен:
tcp 0 0 *:https *:* LISTEN 5221/apache2
Это говорит вам, какая программа работает на порту https
. (Используйте netstat -t -l -p -n
, если вам просто нужен номер порта, и в этом случае вы увидите *: 443
вместо *: https
). Это говорит о том, что порт 443 прослушивает сокет. Кроме того, здесь 5221 - это PID для apache2, так что он также сообщает вам, какое приложение используется. Иногда может быть не сразу видно, какое приложение используется (вы можете посмотреть содержимое / proc / 5221 / cmdline
, чтобы увидеть более подробную информацию, например).
Я бы сосредоточился только на записи, привязанные к внешним интерфейсам (и игнорирующие записи localhost
).
Как правило, вы можете увидеть, что что-то прослушивает порт 22 (ssh), 80 (http), 443 (https), ...
Затем вам нужно будет протестировать их один за другим в зависимости от метода, описанного ниже.
Для пример echo "" | openssl s_client -connect your.host.name:80
должен показать сообщение об ошибке, так как ваш веб-сервер не будет (или не должен) слушать запросы SSL / TLS на этом порту, echo "" | openssl s_client -connect your.host.name:443
должен работать и показать вам некоторую информацию о сертификате и соединении.
echo "" | openssl s_client -connect your.host.name:443
должен работать и показать вам некоторую информацию о сертификате и соединении. поскольку ваш веб-сервер не будет (или не должен) слушать запросы SSL / TLS на этом порту, echo "" | openssl s_client -connect your.host.name:443
должен работать и показать вам некоторую информацию о сертификате и соединении.
[/ EDIT]
Для предварительного SSL / TLS вы можете проверить, будет ли он принимать TLS ClientHello
(т. Е. Сервер TLS от начало соединения), но с использованием echo "" | openssl s_client -connect hostname: port
( echo "" |
не является обязательным, он просто остановит openssl, как только он установит соединение, поскольку вы, вероятно, не хотите отправлять что-либо конкретное) .
Для «обновленных» соединений SSL / TLS , выполняемых после команды на уровне протокола приложения (например, STARTTLS
), это может быть сложнее.
Вы можете сделайте это, добавив -starttls the_name_of_the_protocol
к этой команде openssl s_client
. Согласно документации OpenSSL, « В настоящее время
Для автоматизации этого процесса потребуется инструмент, который может понять все эти протоколы, что может быть довольно сложно.
Пара дополнительных моментов, если это для более общего аудита безопасности:
Включение SSL / TLS редко бывает достаточно. Вы также хотите убедиться, что он настроен правильно: действительный сертификат, SSLv2 отключен, попытка перейти на более высокие значения SSL / TLS (SSLv3, TLSv1.0, TLSv1.1 +) путем отключения более старых версий, если ваша база пользователей достаточно совместимое, небезопасное повторное согласование отключено, если возможно, достаточно надежные комплекты шифров.
Несмотря на использование библиотеки OpenSSL, OpenSSH (и SSH в целом) не основан на SSL / TLS. Возможно, вы все равно захотите сохранить это, даже если ваша политика предусматривает использование только служб SSL / TLS.