strongSwan EAP: идентичность IKE против ожидаемого имени AAA
Клиент strongSwan EAP может проверять два имени сервера. remote.id охватывает шлюз IKE, а local.aaa_id — сервер EAP; это не одно и то же поле.
Аутентификация EAP поверх IKEv2 может потребовать от клиента проверить два разных имени сервера в одном соединении. Шлюз, завершающий IKE, предъявляет одну идентичность, а серверная часть EAP, завершающая внутренний обмен TLS, может предъявить другую. В strongSwan они живут в разных блоках конфигурации, и имя в неверном блоке даёт сбой, который выглядит как проблема с сертификатом. Именно чтение того, какая проверка не прошла, показывает, какой блок править.
Одно соединение, две идентичности сервера
Первая идентичность относится к обмену IKE. Клиент набирает адрес и ожидает, что противоположная сторона докажет определённую идентичность, обычно имя в сертификате шлюза.
Вторая относится к EAP. С PEAP или TTLS клиент строит туннель TLS к серверу аутентификации внутри IKE SA, и этот внутренний сервер предъявляет собственный сертификат. Когда серверная часть — отдельный хост, её имя отличается от имени шлюза. Клиент, проверяющий только первое имя, принимает всё, что утверждает второе. А клиент с одним именем в обоих местах даёт сбой, как только эти два действительно разойдутся.
Оба имени берутся из конфигурации оператора, а не из сертификата, который убирает ошибку. Спросить оператора о деталях развёртывания быстрее, чем угадывать два имени хостов.
Какое поле к какому уровню относится
В swanctl адрес и идентичность IKE — отдельные параметры, а идентичность EAP — третий.
Удалённый адрес выбирает, куда идут пакеты, а удалённая идентичность указывает, что должна доказать противоположная сторона. Ожидание EAP записывается в блоке local, потому что оно описывает обмен EAP этого клиента, а не поведение IKE противоположной стороны. Именно это размещение читают неправильно. Имя стоит в конфигурации клиента, описывая при этом сервер, и именно поэтому кажется неуместным.
connections {
office {
remote_addrs = vpn.example.com
local {
auth = eap-peap
aaa_id = auth.example.com
}
remote {
auth = pubkey
id = vpn.example.com
}
}
}
Этот фрагмент не является полным соединением; материалы доверия, учётные данные и политики дочерних соединений всё ещё должны присутствовать. Дословное копирование в рабочий файл заменило бы параметры, которые вам ещё нужны.
Почему aaa_id живёт под local
Блок local описывает, что делает эта сторона во время аутентификации, включая метод, который она будет использовать, и идентичность, которую ожидает от другой стороны для этого метода. Ничто в нём не утверждает, что сервер AAA работает на той же машине.
Значение по умолчанию делает ловушку острее. Когда явное значение не задано, ожидаемая идентичность AAA следует за удалённой идентичностью, поэтому развёртывание с одним именем работает и скрывает различие. Явное значение важно только тогда, когда развёртывание EAP действительно завершается в другом месте. Установка его на другое имя без этой причины создаёт сбой, который оператор не может воспроизвести. Прочитайте развёртывание, прежде чем придумывать второе имя.
Держите значение идентичным тому, что действительно утверждает сертификат серверной части, включая форму имени. Точки в конце или подстановочного символа, не покрывающего хост, достаточно, чтобы проверка не прошла.
Интерфейсы, которые не могут выразить разделение
Профиль NetworkManager — не тот же интерфейс конфигурации, что swanctl. Плагин за ним предоставляет более узкий набор средств управления идентичностью, и то, какие из них существуют, зависит от установленной версии.
Это важно, когда развёртыванию действительно нужны два имени. Поле с меткой идентичности сервера может настраивать один уровень, но не другой, поэтому профиль может выглядеть правильным и всё равно не пройти внутреннюю проверку. Проверьте, что поддерживает установленный плагин, прежде чем предполагать, что профиль может выразить такую схему. Если не может, выбор за оператором: другой путь предоставления или исправленный дизайн идентичности сервера. Ослабление PEAP или принятие любого имени меняет политику аутентификации вместо того, чтобы её исправить.
Альтернативу не следует придумывать на клиенте. Запросите поддерживаемую схему в письменном виде, затем храните этот ответ вместе с профилем.
Отличайте несовпадение идентичности от истёкшего сертификата
Несовпадение имени и истёкший сертификат — разные сбои, и журнал их различает. Прочитайте сообщение, прежде чем решать, какое поле менять.
swanctl --list-conns
swanctl --list-sas
journalctl -u strongswan -n 50 --no-pager
Установка нужной идентичности AAA не продлевает сертификат и не создаёт доверия к его издателю, а продление сертификата не исправляет неверное ожидаемое имя. Прочитайте, какая проверка не прошла, прежде чем править ещё одно поле идентичности. Затем перезагрузите конфигурацию и убедитесь, что загруженное соединение показывает заданное значение, ведь отредактированный файл, который так и не загрузили, ничего не меняет. Запишите оба имени и их уровни в заметки о развёртывании.