Отозванный клиент всё ещё подключается: список так и не дошёл
Отзыв — это входные данные для проверки сертификата, а не команда, завершающая сессию. Сравните, как видят список новое подключение и работающий туннель.
Отзыв никогда не проникает в работающий туннель, чтобы удалить сессию. Список — это входные данные для проверки сертификата, и его читают во время обмена канала управления, с которого начинается сессия TLS. Этот один факт объясняет оба сюрприза: отозванный клиент подключается снова, потому что список так и не дошёл до проверяющего, а существующая сессия выживает, потому что никто ничего не перепроверил.
Список — это входные данные, а не действие
При установке сессии сервер проверяет сертификат клиента по своим якорям доверия, а директива отзыва добавляет к этому решению поиск по списку. Проверка происходит на сервере, поэтому клиент не может увидеть, что его сертификат отозван, и продолжает предлагать тот же самый. Поэтому профиль, который всё ещё подключается, доказывает лишь то, что какой-то проверяющий принял цепочку, а не то, что отзыв не сработал.
Сам список — это подписанный объект с датой выпуска и датой следующего обновления. Посторонний список, список, подписанный другим органом, или список, чья дата следующего обновления прошла, не заменяют текущий, и то, отклоняется ли устаревший список или молча принимается, зависит от развёртывания.
Новое подключение против работающей сессии
Отзыв оценивается при установке или пересогласовании сессии, а не по каналу данных на каждом пакете. У уже подключённого клиента есть ключи трафика, поэтому он продолжает пропускать пакеты после того, как его сертификат появился в списке. Интервал пересогласования по умолчанию измеряется часами, поэтому обновлённый список может вступить в силу для новых, пока работающий туннель остаётся.
| Situation | What the list does | When it applies |
|---|---|---|
| Fresh connection | Blocks the handshake | At verification, immediately |
| Renegotiation | Blocks the new exchange | At the next renegotiation interval |
| Established data channel | Nothing | Until the session ends |
Немедленное применение требует осознанного действия, а не только списка. Перезапуск службы заставляет каждого клиента подключиться заново, тогда как завершение одной сессии через интерфейс управления оставляет остальные нетронутыми. Выберите один вариант на инцидент и запишите, какой использовали. У двух вариантов разный радиус воздействия, и это и есть настоящее решение.
Доставьте файл, который проверяющий действительно читает
Список нужно создать из записи органа, а затем скопировать на каждую машину, которая проверяет сертификаты. Создать его на хосте CA и никогда не установить на сервере — самая частая ошибка, и она выглядит ровно как сломанная функция отзыва.
ca ca.crt
cert server.crt
key server.key
crl-verify /etc/openvpn/crl.pem
Две детали решают, читается ли файл на самом деле. Относительный путь разрешается относительно каталога конфигурации, поэтому копия, оставленная в домашнем каталоге оператора, может никогда не найтись. А демон обычно после запуска отказывается от привилегий, поэтому учётной записи выполнения нужны право поиска в каждом родительском каталоге и право чтения файла. Проверяйте и то и другое от учётной записи выполнения, а не от root, иначе тест докажет не то.
На хостах systemd усиленный unit тоже может скрыть путь — представлением только для чтения или защищённым системным каталогом. Изнутри службы это неотличимо от отсутствующего файла, поэтому проверьте ограничения unit, прежде чем искать ошибку в правах. Прочитайте файл unit, прежде чем винить режим файла.
Подтверждайте на сервере, а не на клиенте
Журнал сервера называет, что произошло: открытие списка, его загрузка или сбой проверки с отозванным серийным номером. Клиент сообщает лишь об общей ошибке рукопожатия, поэтому журналы клиента — плохое место для поиска решения об отзыве.
Проверьте свежей попыткой из отозванного профиля и затем остановитесь. Успешное подключение из этого профиля — сигнал проверить путь к файлу и учётную запись выполнения, а не предположить, что список был неверным. Сохраните эту успешную попытку как приёмочный тест и не считайте переподключение, которое вы не наблюдали.
Что ничего не отзывает
Удаление профиля с ноутбука, удаление файла сертификата с клиента или просьба пользователю перестать подключаться ничего не меняют на сервере. Сертификат остаётся действительным, пока орган не зафиксирует отзыв, а проверяющий не прочитает получившийся список.
Поэтому цепочку стоит записать: зафиксируйте отзыв, создайте и подпишите список, распространите именно этот файл и подтвердите, что служебная учётная запись может его прочитать. Каждое звено короткое, и любое отсутствующее оставляет отозванного клиента весело подключаться. Контрольный список из четырёх строк лучше предположения без единой строки.