Перейти к содержанию

Диагностика ГОСТ-сертификатов в libksba и GnuPG

Если программа не принимает ГОСТ-сертификат, начните с разделения проблемы на формат, криптографию и доверие. Не импортируйте секретные ключи в диагностические онлайн-сервисы; большинство проверок выполняется локально.

1. Проверьте компоненты НАЙС.ОС

rpm -q libksba libgcrypt gnupg gnutls
command -v gpgsm
command -v certtool
command -v openssl

Информация об установленных компонентах помогает установить, какой именно инструмент участвует в ошибке. gpgsm и gpg используют разные модели ключей и не заменяют друг друга.

2. Установите формат сертификата

file partner.cer
openssl x509 -inform DER -in partner.cer -noout -subject -issuer

Если DER-вариант не подошёл, попробуйте PEM:

openssl x509 -inform PEM -in partner.cer -noout -subject -issuer

Не выполняйте преобразование по одному только расширению имени файла. Сохраните исходник, работайте с копией.

3. Выясните алгоритмы и назначение

openssl x509 -in partner.pem -noout -text

Проверьте Public Key Algorithm, Signature Algorithm, Key Usage, Extended Key Usage, срок действия и CA:TRUE у центров сертификации. Для сертификата клиента и сервера требуются подходящие назначения.

4. Проверьте работу с сертификатами X.509

gpgsm --version
gpgsm --list-keys

Для импорта публичного сертификата, когда этого требует процедура:

gpgsm --import partner.pem

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

5. Отделите проблемы доверия от алгоритмов

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

6. Когда обращаться к системным журналам

journalctl --since '30 minutes ago' --no-pager \
  | grep -Ei 'gpgsm|ksba|gcrypt|certificate|signature|gost' \
  | tail -80

Команда показывает сообщения, если приложение пишет в системный журнал. Для собственного приложения также изучайте его журнал; отсутствие строк в journalctl не означает отсутствие ошибки.

Сводная таблица

Ошибка Вероятная область Следующее действие
Некорректная ASN.1/DER-структура Формат сертификата/CMS Получить исходный файл заново; определить PEM/DER
Неизвестный OID ключа Алгоритмы и параметры Просмотреть Public Key Algorithm, сверить OID
Неправильная длина ключа или подписи Двоичное кодирование Проверить источник документа и алгоритм
Подпись не совпадает Криптография или содержимое Убедиться, что проверяется оригинальный файл и верный сертификат
Недоверенный сертификат PKI Проверить цепочку УЦ и политику доверия
Нет закрытого ключа Ключевой контейнер Найти правильный носитель/контейнер, не создавать новый поверх него

Связанные руководства: libksba, CMS, GnuTLS, OpenSSL — диагностика.