Easy-RSA сообщает, что PKI нет? Он смотрит в другом месте
Отсутствие ключа CA или index.txt обычно означает, что Easy-RSA 3 выбрал другой каталог. Сначала проверьте селектор PKI, приоритет и отпечаток издателя.
Команда останавливается из-за отсутствующего ca.crt или отсутствующего index.txt, хотя CA выпускает сертификаты уже месяцами. В самом удостоверяющем центре ничего не изменилось; команда просто заглянула в другое место. Easy-RSA 3 определяет каталог PKI из опции, переменной окружения, файла vars и встроенного значения по умолчанию, и любой из них может указывать в стороне от центра развёртывания. Проверьте, какой из них победил, прежде чем что-либо создавать.
Ошибка называет файл, а не каталог
Каталог установки и каталог издателя — два разных места. Найти easyrsa на машине доказывает лишь то, что инструмент установлен, а не то, что он нашёл центр, которому доверяет ваш VPN.
Поэтому переустановка пакета или повторный запуск шага init кажется полезной и ничего не меняет.
Сначала проверьте селектор
В Easy-RSA 3 селектор — это EASYRSA_PKI или соответствующая опция --pki-dir. Укажите абсолютный путь, например --pki-dir=/srv/pki/office, и ответ перестанет зависеть от того, где вы случайно находились. Эта одна привычка устраняет целый класс этой ошибки, особенно для скриптов, запускаемых из cron или из копии CI.
Сначала подтвердите поколение, потому что привычка Easy-RSA 2 с файлом vars плюс build-key — это другая модель, не та, которую ожидает Easy-RSA 3. easyrsa --version печатает поколение, прежде чем делать что-либо ещё, а ./easyrsa --help перечисляет подкоманды: цель build-key означает 2.x, тогда как build-client-full означает 3.x. Перенос старого KEY_DIR пути в вызов 3.x из-за того, что имя каталога кажется знакомым, даёт именно эту ошибку.
Если строка версии и синтаксис команды не совпадают, остановитесь и прочитайте документацию установленного выпуска.
Приоритет объясняет проигравший файл vars
Документированный приоритет — это опция командной строки, затем окружение, затем файл vars, затем встроенное значение по умолчанию. Поэтому правильное значение в vars проигрывает унаследованной переменной окружения, и это тихая версия этого отказа. Изучите предполагаемые переменные и выбор файла, вместо того чтобы выливать всё окружение в тикет. Разница между ними обычно является секретом.
Пройдите цепочку по порядку и отметьте, какой источник дал путь, который использовала команда. Как только вы это узнаете, исправление — это флаг или export, а не новый удостоверяющий центр.
Справочник по настройке Easy-RSA определяет селектор и приоритет, и именно на него нужно ссылаться в тикете.
Подтвердите издателя по открытым материалам
При обычном файловом издателе прочитайте ca.crt и сравните его отпечаток с записью издателя, которую вы одобрили. Совпадающее имя субъекта не является доказательством подлинности, как и каталог с именем production. Только отпечаток связывает найденный файл с центром, которому вашим коллегам велели доверять.
Достаточно проверки только для чтения: openssl x509 -in /srv/pki/office/ca.crt -noout -subject -issuer -serial -fingerprint -sha256.
Затем определите роль каталога. Каталог запросов, который использует клиент, — не база данных издателя, а ключ подписи, хранимый офлайн, не должен быть на каждом узле VPN. Отсутствие ca.key в такой схеме — свойство дизайна, а не разрешение изобрести заменяющий центр.
Если состояние действительно утрачено
Иногда путь верен, а состояния действительно нет. Пустой index.txt и перезапущенный счётчик серий дают PKI, которая выглядит здоровой и не может ничего доказать о сертификатах, которых никогда не видела: продления не отзовут старые, а новые номера столкнутся с историей. Восстановите вместо этого из одобренной резервной копии CA, потому что инициализация пустой PKI в другом месте лишь переносит ошибку и оставляет после себя второй, несвязанный центр.
Когда путь и издатель совпадают, разбирайте следующий отказ по существу. Permission denied, ключ подписи, которому нужна его парольная фраза, и отсутствующая запись выпуска — это три разных неисправности, и только одна из них касается каталога, который вы только что исправили.
Никогда не снимайте шифрование ключей и не расширяйте права каталогов, чтобы замазать ошибку пути. Ошибку дёшево исправить; восстановление — нет.