Инвентаризация сертификатов VPN: что может доказать реестр CA
Папка на сервере, реестр CA, список отзыва и таблица сессий отвечают на разные вопросы. Держите их отдельно, когда инвентаризируете удостоверения VPN.
Ваш шлюз принимает клиентский сертификат, которого никогда не видел, потому что то, чем он настроен, — это доверенный издатель, а сертификат приходит во время рукопожатия. Так протокол и должен работать, и именно поэтому список каталога на сервере — плохая инвентаризация. Издатель знает, что создал, сервер знает, что подключилось, а состояние отзыва знает, что было отозвано. Инвентаризация, которая смешивает эти три записи, в итоге утверждает то, чего не говорила ни одна из них.
Шлюз доверяет издателю, а не списку файлов
Проверка сравнивает предъявленный сертификат с якорем доверия, поэтому удостоверение, созданное тем же издателем вчера, подключается, никогда не существуя на диске сервера. Для этого ничего не нужно копировать, и никто не должен утверждать это вручную. Поэтому собственные записи сервера описывают приходы, а не совокупность удостоверений, которые могли бы прийти.
Обратный разрыв так же неудобен. В каталоге могут лежать просроченные сертификаты, отозванные и удостоверения, выданные для устройств, которые так и не были развёрнуты. Подсчёт файлов отвечает, сколько файлов есть, а это вопрос, который никто не задавал. Начните вместо этого с записей, которые несут смысл.
Четыре вопроса, четыре разных реестра
Каждый тип записи хорошо отвечает на один вопрос и плохо на остальные, поэтому отчёт, который их объединяет, выглядит полным, хотя ошибочен определённым образом. Таблица ниже упорядочивает их по вопросу, который они решают, а не по системе, которая их создаёт.
| Question you are answering | Where the answer lives | How quickly it changes | What it will never show |
|---|---|---|---|
| Was this identity ever created? | The issuer's issuance database | Only when something is issued | Whether the device still exists |
| Is a copy sitting on this host? | The paths you actually inspected | Whenever anyone copies files | Certificates that were never copied here |
| Has the issuer withdrawn it? | Published revocation state | When the issuer next publishes | Withdrawals that are not published yet |
| Is it connected right now? | The live session table | Continuously | Anything about past or future sessions |
Архив открытых сертификатов не является секретом, так как не содержит закрытых ключей, но и не подлежит передаче. Субъекты и имена устройств раскрывают операционные подробности, и отчёт должен оставаться у той аудитории, которой он нужен. Закрытые ключи остаются полностью вне инвентаризации, потому что ей нужны метаданные, а не учётные данные.
Издатель и серийный номер — единственный устойчивый ключ
Субъекты переиспользуются, а имена файлов применяются повторно, поэтому имя, которое в прошлом году обозначало одно устройство, теперь может обозначать другое. Ни то, ни другое не является ключом, и отчёт, построенный на любом из них, в конце концов сведёт два удостоверения в одну строку.
Пара издатель и серийный номер однозначно идентифицирует сертификат, и оба поля берутся из самого сертификата. Запишите их вместе с субъектом, датами действия, источником, откуда пришла копия, и ответственным лицом или устройством. Добавьте состояние отзыва и развёртывания отдельными полями с собственными временами наблюдения, потому что сертификат внутри окна действия не становится автоматически разрешённым. Эти два факта живут в разных системах, и их слияние скрывает случай, когда удостоверение отозвано, а его файл всё ещё выглядит актуальным.
Читайте по одному сертификату
Шаблон, раскрывающийся по каталогу, не является пакетным интерфейсом, и он скрывает, какой файл дал какой вывод. Читайте метаданные по каждому сертификату, а сторону отзыва читайте из её собственного артефакта. Справочник OpenSSL x509 перечисляет поля, которые печатают эти параметры.
openssl x509 -in <cert>.pem -noout -issuer -serial -subject -dates -fingerprint -sha256
openssl crl -in <issuer>.crl -noout -text | head -n 40
Для управляемого PKI Easy-RSA запрашивайте базу данных выпуска через рабочий процесс, который поддерживает инструмент, вместо того чтобы предполагать структуру каталогов, и держите оригиналы только для чтения, пока собирается инвентаризация. Формат реестра достаточно регулярен, чтобы подсчитать действительные записи и перечислить отозванные, не открывая базу данных вручную.
grep -c '^V' pki/index.txt
grep '^R' pki/index.txt | cut -f4,5
Инвентаризация, которая переживёт следующий выпуск
Разовая выгрузка каталога устаревает в тот момент, когда выпускается следующий сертификат, поэтому стройте отчёт из рабочего процесса выпуска и позволяйте ему обновляться как части обычной работы. Это также делает отчёт воспроизводимым, что важно, когда два человека не согласны в том, что было выпущено.
Используйте результат для решений о продлении и выводе из эксплуатации, а не как упражнение с таблицей. Удаление локальной копии не аннулирует удалённые копии, которые уже существуют. Отзовите удостоверение через настроенный рабочий процесс отзыва и авторизации, затем запишите отзыв с его датой. Удостоверение, исчезнувшее с сервера, но по-прежнему пользующееся доверием издателя, не выведено из эксплуатации, и именно это различие отделяет точную инвентаризацию от просто успокаивающей.