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

Список — это входные данные, а не действие

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

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

Новое подключение против работающей сессии

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

SituationWhat the list doesWhen it applies
Fresh connectionBlocks the handshakeAt verification, immediately
RenegotiationBlocks the new exchangeAt the next renegotiation interval
Established data channelNothingUntil the session ends

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

Доставьте файл, который проверяющий действительно читает

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

ca ca.crt
cert server.crt
key server.key
crl-verify /etc/openvpn/crl.pem

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

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

Подтверждайте на сервере, а не на клиенте

Журнал сервера называет, что произошло: открытие списка, его загрузка или сбой проверки с отозванным серийным номером. Клиент сообщает лишь об общей ошибке рукопожатия, поэтому журналы клиента — плохое место для поиска решения об отзыве.

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

Что ничего не отзывает

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

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

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