Назад | Перейти на главную страницу

Незавершенное подтверждение SSL-подтверждения в журнале Apache SSL

Сценарий: мы проводим в нашем классе несколько экспериментов с надежными соединениями и SSL, и я хочу продемонстрировать запрос подтверждения SSL при атаке «человек посередине».

У меня есть сервер Apache с самозаверяющим сертификатом. Все работает нормально, но ведение журнала кажется неполным, так как нет возможности получить список попыток SSL. Как только клиент принимает «исключение», я получаю обычные сообщения журнала доступа для каждого запроса. Однако мне нужно знать, какой запрос ssl привел к сбою. Вот мои директивы журнала:

LogLevel warn ErrorLog logs / ssl_error_log CustomLog logs / ssl_access_log комбинированный # комбинированный - ваш средний пользовательский журнал

Мое желание - это список всех попыток рукопожатия SSL. Что мне не хватает, что могло бы дать что-то вроде следующего? (Очевидно, точные слова не нужны, но приблизительно)

0/0/0 00:00:00 - 192.168.1.10 - hijk.lmnop.edu - Несоответствие SSL

SSL-соединения имеют дополнительные параметры для CustomLog но они не собираются нарушать пошаговый статус подключения. Вы, вероятно, захотите попробовать LogLevel debug, но это даст вам много лишнего мусора, через который нужно продираться.

Честно говоря, лучшей идеей для этого класса было бы продемонстрировать использование openssl s_server , так как ее можно настроить для пошагового отображения состояния конечного автомата SSL, вы сможете точно увидеть, на каком этапе клиент разорвал соединение.

Что-то вроде

openssl s_server -key [somekey.pem] -cert [somecert.pem] -accept 443 -state -www 

Когда кто-то подключится, он распечатает шаги подключения:

SSL_accept:before/accept initialization
SSL_accept:SSLv3 read client hello A
SSL_accept:SSLv3 write server hello A
SSL_accept:SSLv3 write certificate A
SSL_accept:SSLv3 write key exchange A
SSL_accept:SSLv3 write server done A
SSL_accept:SSLv3 flush data
SSL_accept:SSLv3 read client key exchange A
SSL_accept:SSLv3 read finished A
SSL_accept:SSLv3 write change cipher spec A
SSL_accept:SSLv3 write finished A
SSL_accept:SSLv3 flush data

Параметр -www позволяет распечатать некоторую информацию, когда кто-то действительно подключается к нему с помощью веб-браузера. Если пользователь уйдет, не приняв поддельный сертификат, я предполагаю, что соединение будет прервано где-то посередине.

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

Согласование сертификата происходит между вашим браузером и прокси-сервером, который выполняет атаку «человек посередине». На стороне сервера единственное различие, которое вы можете увидеть, - это IP-адрес клиента.

Однако на сервере вы можете настроить сертификаты клиентов для аутентификации клиентов. Сервер будет принимать соединения только от доверенных клиентов. Если соединение подделано, сертификат клиента будет другим, и сервер закроет соединение.