Вопрос или проблема
Насколько я понимаю, беспроводные точки доступа, использующие WPA-Enterprise (т.е. WPA плюс 802.1X), могут отправлять клиенту сертификат открытого ключа во время настройки соединения. Клиент может проверить этот сертификат, чтобы удостовериться, что он не подключается к мошеннической точке доступа (аналогично проверке сертификата в HTTPS).
Вопросы:
- Я правильно это понял?
- Если да, есть ли способ скачать сертификат AP? Идеально было бы решение, которое работает под Linux.
Я хотел бы скачать самоподписанный сертификат, чтобы использовать его для проверки последующих попыток подключения. Это было бы проще, чем запрашивать файл у оператора точки доступа.
Да, самые распространенные конфигурации WPA-Enterprise используют либо PEAP, либо TTLS, обе реализуют TLS поверх EAP поверх 802.1X.
Обычно сертификат уже опубликован где-то операторами сети именно для этой цели. Это не то, что пользователь должен спрашивать.
К сожалению, wpa_supplicant не имеет опции для извлечения сертификатов даже в режиме отладки. (Я обновлю это, если найду лучший способ.) Тем не менее, вы все равно можете отслеживать фактический процесс аутентификации EAPOL. Сначала установите Wireshark.
Во время отключения вручную включите интерфейс и начните захват:
$ sudo ip link set wlan0 up
$ wireshark -ki wlan0 &
Запустите wpa_supplicant, и вскоре вы увидите TLS рукопожатие:
Сервер сразу же отправит свои сертификаты после ServerHello. Выберите первый такой пакет, затем углубитесь в:
802.1X
└─Расширяемый протокол аутентификации
└─Протокол безопасных сокетов
└─Протокол рукопожатия: Сертификат
└─Сертификаты
Щелкните правой кнопкой мыши на первом экземпляре “Сертификат (данные)” и выберите “Экспортировать выбранные байты пакета”. Wireshark сохранит его как файл в двоичном DER формате. Повторите это для всех других сертификатов. Верхний (сертификат RADIUS сервера) содержит информацию, которую вы можете настроить в altsubject_match
; последний (корневой ЦС) должен быть передан wpa_supplicant как ca_cert
.
Теперь у вас есть несколько *.crt
или *.der
файлов в двоичном DER формате. Преобразуйте их в текстовый формат PEM:
openssl x509 -inform DER < mycert.der > mycert.pem
(Если ваш wpa_supplicant использует OpenSSL в качестве обработчика TLS, вы должны предоставить ему сертификат “корневого ЦС”; предоставление сертификата сервера не сработает.)
Обратите внимание, что также возможно, что последний сертификат, увиденный в Wireshark, не будет сертификатом корневого ЦС, а только выпущенным одним из корневых ЦС в вашем каталоге /etc/ssl/certs
… Если это так, убедитесь, что также установлено domain_suffix_match
— в противном случае использование публичных ЦС будет небезопасным (802.1X, к сожалению, не знает, что “имя хоста” следует проверять, так же как, например, HTTPS).
Я хотел сделать что-то подобное (PEAP с MSCHAPv2), поэтому разместил вопрос на рассылке hostap. Автор ответил:
wpa_supplicant отправляет события CTRL-EVENT-EAP-PEER-CERT как события интерфейса управления во время аутентификации EAP, использующей TLS. Эти сообщения
включают хеш SHA256 сертификата и полный хексдамп сырого DER
кодированного сертификата. Записи с depth=0 относятся к сертификату сервера, а более высокие значения depth относятся к ЦС, предоставленным сервером.Например, вы увидите нечто подобное в wpa_cli, когда подключитесь к интерфейсу управления wpa_supplicant:
CTRL-EVENT-EAP-PEER-CERT depth=0 subject="/C=FI/O=w1.fi/CN=server.w1.fi" hash=5891bd91eaf977684e70d4376d1514621d18f09ab2020bea1ad293d59a6e8944
CTRL-EVENT-EAP-PEER-CERT depth=0 subject="/C=FI/O=w1.fi/CN=server.w1.fi" cert=308203ac30820294a003020102020900d8d3e3a6cbe3cd69300d06092a864886f70d01010b05003041310b30090603550406130246493110300e06035504070c0754757573756c61310e300c060355040a0c0577312e66693110300e06035504030c07526f6f74204341301e170d3231303530333137303235335a170d3232303530333137303235335a3034310b3009060355040613024649310e300c060355040a0c0577312e66693115301306035504030c0c7365727665722e77312e666930820122300d06092a864886f70d01010105000382010f003082010a0282010100fd0e5ecd192c6a4183d92c0e36cd09b08fb2c98cc8d203386e54bc43eecef859b1e93f6dd45ee3c573193d0bbc29d7d06e750035fcf765b1b60fcb0649cfa94e3dc2644b18240a70b86e54dc903f6c18fdb688ab37dc8b4bb5e1ffedbb4505a3f0aa512bf179067f2fcd5dfce68aaf1bb97bca4375011d8e2dd9111386fb3c4b60a42949e3d22020cb5c0d9cd29c302111bcb374df64b0b767ee6adfaf3d1802b7dce55475b56c40c4b08a1bc6fdab1eb9efd183090d55ba17884ed0bdcf73367c284bf6aa48d4e8fb25d81dafc96873ac46aecbeb793657adc37002156df0a54373ab7204b11660740e4ac18f52281a957eabd004f6fa11da1bd199a44f9eed0203010001a381b33081b030090603551d1304023000301d0603551d0e0416041471267a1f7281972411aac075fabf31106949d0e7301f0603551d23041830168014a4fdb9391b81b3aaeb881dd481a9b51170cca7e1303506082b0601050507010104293027302506082b060105050730018619687474703a2f2f7365727665722e77312e66693a383838382f30170603551d110410300e820c7365727665722e77312e666930130603551d25040c300a06082b06010505070301300d06092a864886f70d01010b05000382010100b1d96f63a139815510cd05c1cc147d330a9aefc034dc77765b41922015a3c601af1f057cbb374a1d1f005e4a176b7a6a6ca4fbc7e41ee2387f25d1459beb6895f91bba9f40b95dc76ca0466b05acf4384d640b5de07b3031b8a6dad0a53e817b6a1ab54f2d4af200681368b8836b79f9b263a7df52de8e129d8773ec4b4738a29829a8c88b8eb12b47ddebcf6add2102005e7d8d4c19aa7d1bf49ba6a8f8f3a79d66e8540cdc7fe9afa24c888b87542833c55387b041e42e337baac02982c2bd541029f92da499d1e7c7570766ccd02e745d98280afe8a323c623d307c750c1631cecbe7411e4f3c921a3e80b11378b553b26a449fc13b92cf080e083210271b
Если вы хотите доверять только конкретному сертификату для будущих
подключений, вы можете использовать это хеш-значение в профиле сети в следующем виде:
ca_cert="hash://server/sha256/5891bd91eaf977684e70d4376d1514621d18f09ab2020bea1ad293d59a6e8944"
Это способ, который можно использовать для реализации политики доверия при первом
использовании, что похоже на тот случай, который вы описываете. Более полный механизм определен в спецификации Wi-Fi Alliance WPA3 (поиск по “TOD” в этом документе).
Это сработало для меня, но я должен отметить, что мне не нужно было использовать wpa_cli
, так как проверка хеша была достаточна. Это было выведено wpa_supplicant
по умолчанию, поэтому было легко скопировать/вставить оттуда.
Примечание: если вам нужен весь сертификат, то вам нужно будет установить ctrl_interface
в вашем конфигурационном файле и подключить wpa_cli
, чтобы увидеть его. Что-то вроде этого должно сработать:
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=wheel
.
Ответ или решение
Скачивание сертификата беспроводной точки доступа (AP) через протокол 802.1X может представлять собой сложное задание, особенно если вы стремитесь получить самоподписанный сертификат для проверки последующих попыток подключения. Давайте подробно рассмотрим процесс, следуя всем необходимым шагам и рекомендациям.
Шаг 1: Правильное понимание работы 802.1X
Вы абсолютно правы в том, что в большинстве конфигураций WPA-Enterprise используются протоколы PEAP или TTLS, которые реализуют TLS поверх EAP над 802.1X. Это позволяет клиентам (например, ноутбукам или мобильным устройствам) проверять подлинность сервера (точки доступа), но для этого необходимо получать и проверять сертификаты.
Шаг 2: Инструменты для анализа
Для начала вам потребуется инструмент для захвата сетевого трафика, например, Wireshark. Этот инструмент поможет вам записать процесс аутентификации и взаимодействия с сервером точек доступа, чтобы затем извлечь сертификаты.
-
Установите Wireshark.
Убедитесь, что Wireshark установлен на вашем Linux-устройстве. Вы можете установить его с помощью пакетного менеджера вашей системы.sudo apt install wireshark
-
Подготовьте интерфейс для захвата:
Прежде чем начать захват, активируйте ваш беспроводной интерфейс.sudo ip link set wlan0 up
-
Запустите Wireshark:
Запустите Wireshark и начните захват на вашем сетевом интерфейсе:sudo wireshark -ki wlan0 &
Шаг 3: Начало аутентификации
Теперь подключитесь к вашей беспроводной сети с помощью wpa_supplicant. Откройте другой терминал и запустите следующую команду:
sudo wpa_supplicant -B -i wlan0 -c /etc/wpa_supplicant/wpa_supplicant.conf
В Wireshark вы должны увидеть процесс TLS-соединения, включая отправку сервером своих сертификатов. Обратите внимание на пакет "ServerHello" и последующие сертификаты.
Шаг 4: Извлечение сертификатов
-
Выделите пакет сертификата:
В списке захваченных пакетов найдите первый пакет «Certificate» в TLS Handshake. Щелкните правой кнопкой мыши и выберите опцию "Export Selected Packet Bytes". Это позволит сохранить сертификат в двоичном формате DER. -
Конвертация формата:
Полученный сертификат будет в формате DER. Вам необходимо конвертировать его в текстовый формат PEM с помощью OpenSSL:openssl x509 -inform DER -in mycert.der -out mycert.pem
Шаг 5: Настройка wpa_supplicant
После извлечения и конвертации сертификатов, вам необходимо настроить файл конфигурации wpa_supplicant так, чтобы он использовал корневой сертификат (CA) для проверки целостности соединения. Убедитесь, что файл конфигурации содержит:
ca_cert="/путь/к/mycert.pem"
Альтернативный способ получения сертификатов
Кроме описанного способа через Wireshark, вы также можете использовать wpa_cli
, чтобы наблюдать за событиями аутентификации, связанными с получением сертификатов:
- Включите контроллер в конфигурационном файле wpa_supplicant:
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=wheel
- Запустите
wpa_cli
и смотрите события:
sudo wpa_cli
В выходных данных вы сможете увидеть события CTRL-EVENT-EAP-PEER-CERT
, которые содержат хеш и полные данные сертификата.
Заключение
Получение сертификатов от беспроводной точки доступа с помощью 802.1X требует знаний о процессах аутентификации, а также использования специальных инструментов для их захвата и извлечения. Надеюсь, приведенные шаги помогут вам успешно скачать самоподписанный сертификат и обеспечить безопасное подключение к вашей сети. Если у вас возникли дополнительные вопросы или сложности, не стесняйтесь задавать их.