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

Диагностика ГОСТ CMS на НАЙС.ОС

При диагностике отделяйте: доступность файла, формат CMS, криптографическую проверку, закрытый ключ, доверие УЦ, доступность CRL/OCSP. Один код ошибки без этого разделения может привести к неверному исправлению.

Типовые симптомы

Симптом Возможная причина Что проверить
Нет такого файла или каталога Неправильный текущий каталог или имя pwd, ls -l, наличие .sgn и сообщения
GOODSIG + TRUST_UNDEFINED Математика прошла, доверие не установлено trustlist, цепочка, CRL, политики
BADSIG Изменён документ либо неверная связка подпись/сообщение SHA-256 и отрицательный тест
Синтаксическая ошибка в URI Ошибка при обработке адреса в цепочке/отзыве CRL Distribution Points, AIA, Dirmngr debug
No secret key Импортирован только открытый сертификат или другой --homedir gpgsm --list-secret-keys именно для текущего профиля
Ошибка при --decrypt Транспорт ключа, UKM, параметры кривой, отсутствующий ключ OID CMS, адресат, версия GPGSM/libksba
CryptCP 0x200000CA при -help -signf Неподходящая комбинация команд cryptcp -help, порядок аргументов
Ошибка CryptCP 0x200001f9 Неправильная подпись изменённого файла Если это отрицательный тест — ожидаемый отказ
No issuer certificate Нет доверенного издателя/цепочки Сертификат УЦ из проверенного источника

Не теряйте код завершения

Команда gpgsm ... | tee log без pipefail может скрыть сбой: Bash по умолчанию возвращает код tee, а не GPGSM. Для регистрации испытаний:

set -o pipefail
cd /root/gost-cms-test

gpgsm --status-fd 2 \
  --verify test.txt.sgn test.txt \
  > verify.log 2>&1
rc=$?
echo "rc=$rc"

Если вы используете set -e, запускайте предполагаемо ошибочную команду внутри if ...; then ... else ... fi, иначе оболочка завершит скрипт до фиксации причины отказа.

Зафиксируйте именно статусы GnuPG

grep -oE '\[GNUPG:\] (GOODSIG|VALIDSIG|BADSIG|ERRSIG|TRUST_[A-Z_]+)' \
  verify.log || true

Не передавайте полный текст строки GOODSIG в публичном отчёте: за маркером нередко следует DN сертификата, включая персональные данные. Значение строки VALIDSIG тоже стоит обезличить при публичной публикации.

Проверяйте домашний каталог

Если вы использовали:

gpgsm --homedir /root/gost-cms-test/lab/gnupg --import niceos-lab.p12

то команда без --homedir ищет ключи уже в /root/.gnupg. Для проверки используйте точно то же значение:

gpgsm --homedir /root/gost-cms-test/lab/gnupg --list-secret-keys

Успешный импорт сертификата не означает наличие приватного ключа. Проверяйте список секретных ключей, а затем реальный decrypt.

Режимы настройки GPGSM

  • --always-trust допускается для шифрования на собственный тестовый самоподписанный сертификат, но неприемлем как общая политика безопасности.
  • --disable-crl-checks и --disable-policy-checks помогают диагностически отделить криптографическую операцию от сетевой инфраструктуры доверия; отключают значимые проверки.
  • Наличие поддержки GOST28147 в выводе версии — необходимая предпосылка для испытаний, не доказательство полного цикла CMS.
  • --cipher-algo GOST28147 работает в подтверждённом локальном опыте; CryptoPro-профиль всё равно нужно проверять в обе стороны.

Диагностика зашифрованного CMS

Сначала убедитесь, что входной файл читается:

file /root/gost-cms-test/lab/encrypted.p7e
openssl asn1parse -inform DER \
  -in /root/gost-cms-test/lab/encrypted.p7e -i | head -60

Это только осмотр контейнера. Не подменяйте результат gpgsm --decrypt результатом openssl cms -decrypt, если цель испытания — нативный GPGSM. Файлы, содержащие зашифрованную коммерческую информацию, нельзя отправлять в сторонние публичные сервисы «для расшифрования».

Что присылать в техническую поддержку

Версии программ, маркеры статуса без DN, код завершения, список OID (без закрытых ключей), краткие строки ошибок, контрольные суммы учебных файлов, шаги воспроизведения. Не присылайте PIN, файлы .key, P12, реальные подписанные документы с персональными данными и полное содержимое GNUPGHOME.