Условия и точный источник ошибки
Установите приложение и библиотеку, которая вернула результат. Документальная область этой карточки — OpenSSL 3.0, а не любой браузер, curl или TLS-стек. Код 20 связан с X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT_LOCALLY и относится к поиску издателя при проверке цепочки. Сохраните полный контекст ошибки, доступный depth и условия запуска. Сам по себе номер не сообщает, какой файл отсутствует или какое хранилище использовало приложение.
Отбор входных данных
Подготовьте разрешённые копии сертификата, промежуточных сертификатов и ожидаемого доверенного набора. Запишите их происхождение, момент получения и версию инструмента. Команда во вкладке «Примеры» работает с локальными файлами и не обращается к серверу. Имена roots.pem, intermediates.pem и server.pem учебные; наличие этих файлов не подразумевается. Не смешивайте доверенные якоря с вспомогательными сертификатами только потому, что все они имеют формат PEM.
Как прочитать результат
В заметке отражены код 20 и три роли входных файлов. При чтении реального вывода найдите сертификат на указанной глубине, его issuer и доступный кандидат издателя. Совпадение текстовых имён не заменяет криптографическую проверку. Не переносите вывод браузера в OpenSSL без проверки реального состава цепочки и хранилища каждого клиента.
Последовательность проверки
Проверьте, какой сертификат сервер или экспорт действительно предоставил, затем состав доступных intermediate и доверенных якорей. Параметр -untrusted задаёт вспомогательный набор для построения пути; CAfile задаёт доверенный материал в выбранных условиях. Локальная проверка должна сохранять эти роли. Отсутствующий intermediate и отличающийся trust store — отдельные гипотезы, которые проверяют по входным данным. Номер 20 не разрешает объявить любую из них уже доказанной.
Следующий шаг
После проверки состава повторите сравнимый локальный анализ в разрешённой среде и сохраните исходные параметры с результатом. Если проверка успешна, отдельно сопоставьте hostname, назначение сертификата, время и условия реального приложения: построение цепочки не является полным доказательством исправности его TLS-соединения. Изменение доверенных наборов и выдача новых сертификатов требуют самостоятельной процедуры, здесь приведено только чтение и диагностика.
Если результат не воспроизводится
Сравните версии, переменные и конфигурацию клиента, реальные входные сертификаты, часы и способ выбора хранилища. Один и тот же файл мог проверяться с разными наборами доверия. Запишите различия вместо отключения валидации ради исчезновения ошибки. Если исходного вывода или нужного сертификата нет, укажите этот пробел; отсутствие кода в новом запуске не доказывает устранения причины старого отказа.