CA может подписать два сертификата, которые получают одну и ту же OpenVPN конфигурацию для конкретного клиента, и ничто ни в одном из них никого не предупреждает. Серийные номера различаются, ключи различаются, и полные субъекты тоже различаются, как только меняется организационное подразделение. Сервер определяет политику для каждого клиента по одному имени, и это имя — единственное, что должно быть уникальным.

Сервер определяет имя, а не серийный номер

При обычном поиске сертификата сервер берёт общее имя из предъявленного сертификата и ищет запись client-config-dir с этим именем. Серийный номер никогда не участвует в поиске. Два сертификата, различающиеся во всех полях, кроме общего имени, попадают в один и тот же файл, поэтому второе подключение наследует фиксированный адрес и отправленные маршруты первого устройства.

Так проверка уникальности на стороне CA проходит, хотя VPN всё равно конфликтует. Две проверки отвечают на разные вопросы.

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

Какое имя сопоставление действительно использует

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

Оба сопоставления могут присутствовать одновременно, и тогда результат зависит от порядка, в котором сервер их разрешает. Сопоставление по имени пользователя, которое откатывается к общему имени, тихо примет сертификат, который реестр никогда не одобрял. Запишите эффективное имя рядом с командой, создавшей его, чтобы следующему оператору не пришлось заново открывать порядок. Проверить одно подключение на каждое сопоставление дёшево и решает вопрос.

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

Два CA могут одобрить одно и то же имя

Служба VPN может доверять более чем одному выпускающему органу, и каждый орган придерживается собственного представления о том, какие имена заняты. Два независимых CA могут оба одобрить одно и то же общее имя для разных устройств, и сервер принимает оба сертификата без жалоб. Проведите инвентаризацию каждого органа в пакете доверия, а не только того, из которого вы обычно выпускаете. Отказ проявляется при первом использовании сертификата второго органа.

Те же рассуждения применимы к CA, которая требует уникальности полного субъекта, а не уникальности общего имени.

Два сертификата с общим именем, но разными организационными подразделениями имеют разные субъекты, поэтому CA не сообщает о конфликте, а сервер видит одно имя. Проверьте настройку, которую ваш инструмент выпуска фактически использует, вместо того чтобы предполагать значение по умолчанию. обработка unique_subject в документации openssl ca — это соответствующий рычаг там, и оболочки вокруг этого инструмента обычно открывают его, а не заменяют.

Продление — это зарезервированное повторное использование, а не коллизия

Продление, сохраняющее имя, — это намеренное повторное использование, и реестр должен сказать это простыми словами. Запишите старый и новый отпечатки под одним именем, чтобы проверяющий мог отличить замену от захвата. Параметр duplicate-cn сервера здесь ни при чём: он управляет одновременными сеансами, а не регистрацией или резервированием имён. Решите, как долго могут существовать оба учётных данных и когда старые перестают приниматься.

Прежде чем передать замену, перечитайте, что на самом деле содержит сертификат. Строка субъекта — это поле, которое сервер будет сопоставлять, что бы ни подсказывало имя файла.

openssl x509 -in device42.crt -noout -subject -serial -issuer

Отзыв обычно идентифицирует сертификат под его издателем, поэтому вывод из эксплуатации одного серийного номера не затрагивает корректно выпущенную замену от того же органа. Именно такого поведения требует чистое продление, и именно поэтому отзыв не может очистить имя, совместно используемое двумя устройствами. Проверьте эффективное имя политики и назначенный адрес на тестовом подключении, прежде чем пользователь увидит устройство. Затем намеренно выведите старые учётные данные из эксплуатации и отметьте, что вы это сделали.

Похожие статьи