Ключевое слово в защите информации
ключевое слово
в защите информации
Получить ГОСТ TLS-сертификат для домена (SSL-сертификат)
Добро пожаловать, Гость! Чтобы использовать все возможности Вход или Регистрация.

Уведомление

Icon
Error

4 Страницы«<234
Опции
К последнему сообщению К первому непрочитанному
Offline dn8  
#31 Оставлено : 15 мая 2026 г. 17:27:56(UTC)
dn8

Статус: Новичок

Группы: Участники
Зарегистрирован: 13.05.2026(UTC)
Сообщений: 6

Сказал(а) «Спасибо»: 5 раз
signature.zip (11kb) загружен 1 раз(а).
Автор: Андрей * Перейти к цитате
Присылайте пример из п.1 и п.2 в ЛС (ссылкой на архив), либо здесь приложите архив, а пароль в ЛС.
Либо самостоятельно смотрите, что там внутри, в ASN.1, в чём разница.

Высылаю архив со следующими файлами (пароль в личку):

(1) Signature Detached - GOOD - made by by CadES in VBA.txt - Подпись, которая принимается НК. Сгенерирована в VBA с помощью библиотеки CadES

(2) Signature Detached - BAD - made by CryptoPro Test Page.txt - Подпись, которая НЕ принимается НК. Сгенерирована с помощью Тестовой страницы CryptoPro https://cryptopro.ru/sit...page/cades_bes_file.html

(3) Signature Detached - BAD - made by cryptcp.x64.exe -strict -detached.txt - Подпись, которая НЕ принимается НК. Сгенерирована с помощью команды
cryptcp.x64_13003.exe -sign -strict -detached -thumbprint {мой отпечаток} файл.расширение


Цитата:

>(через Пользовательский Интерфейс НК)
это публичная страница?


Процесс публикации КТ через Личный Кабинет НК (на сайте) выглядит так:

a) сначала заходишь на сайт, с помощью УКЭП (во время входа выбираешь нужный Сертификат);

b) уже будучи в ЛК, выбираешь нужный GTIN и публикуешь его с помощью УКЭП (во время публикации выбираешь нужный Сертификат)

Автор: Андрей * Перейти к цитате
Через тестовую страницу пробовали с опцией "Отделенная подпись" получить и отправить?

Пробовал, см. пример (2) выше. НК не принимает такую Подпись.

Автор: Андрей * Перейти к цитате
Автор: dn8 Перейти к цитате
Напишите, пожалуйста, полную структуру команды cryptcp.x64.exe для создания Подписи для публикации Карточки Товара в Национальном Каталоге (метод v3/feed-product-sign-pkcs АПИ Национального Каталога).

СТРУКТУРА КОМАНДЫ cryptcp.x64.exe
Исходя из описания АПИ НК (метод v3/feed-product-sign-pkcs) нужно подписывать как-то так:
Код:
cryptcp.x64.exe -sign -addchain -strict -detached -thumbprint {MyThumbprint} xmlBase64.txt


Однако Подпись, возвращаемая данной командой, не подходит.


ОШИБКА
Я перепробовал все параметры и их сочетания (-addchain, -strict, -detached, -cadesbes) - АПИ НК всегда возвращает ошибку типа:
Код:
{"apiversion":3,"result":{"signed":[],"errors":[{"goodId":1234567890,"message":"Ваш сертификат не прошел проверку, попробуйте другой сертификат"}]}}



-addchain если убрать - точно ошибка сохраняется такая же?


Плагин (на тестовой странице) создаёт в base64(DER) + отсоединенная ЭП
Приложение, без -addchain:
cryptcp.x64_13003.exe -sign -strict -detached -thumbprint {мой отпечаток} файл.расширение

создаёт такой же вариант, только в плагине ещё создаётся еще один подписанный атрибут "имя документа" - но это не влияет на проблему.

plugin vs exe.png (66kb) загружен 5 раз(а).



Принял. Спасибо за пояснения!

Отредактировано пользователем 15 мая 2026 г. 17:55:26(UTC)  | Причина: Не указана

Offline Андрей *  
#32 Оставлено : 15 мая 2026 г. 18:30:14(UTC)
Андрей *

Статус: Сотрудник

Группы: Участники
Зарегистрирован: 26.07.2011(UTC)
Сообщений: 14,159
Мужчина
Российская Федерация

Сказал «Спасибо»: 618 раз
Поблагодарили: 2389 раз в 1880 постах
Signature Detached - BAD - made by cryptcp.x64.exe -strict -detached - GTIN 4070033672372.txt
Неправильное значение хеша
Хеш указан: 64BBBA4CDC05C8BD665BB8651579A3CD47D25E2504D1E3245C85268E8634DCA8


Я правильно понимаю, что "исходный xml" - один и тот же?
ЭТО ТОЧНО?

Потому что странно будет дальше изучать, если в post запросе с ЭП от cryptcp было что-то другое.

В файле GOOD - исходный xml, так?
И хеш там:
71EC64897F5575D1E257FF04239DCEA3FB755F65719DF7363E1C06815560C659

Техническую поддержку оказываем тут
Наша база знаний
thanks 1 пользователь поблагодарил Андрей * за этот пост.
dn8 оставлено 18.05.2026(UTC)
Offline Андрей *  
#33 Оставлено : 15 мая 2026 г. 18:34:42(UTC)
Андрей *

Статус: Сотрудник

Группы: Участники
Зарегистрирован: 26.07.2011(UTC)
Сообщений: 14,159
Мужчина
Российская Федерация

Сказал «Спасибо»: 618 раз
Поблагодарили: 2389 раз в 1880 постах
в GOOD - вложен сертификат АУЦ и пользовательский,
в BAD - только пользовательский. Но это уже не влияет.
Техническую поддержку оказываем тут
Наша база знаний
thanks 1 пользователь поблагодарил Андрей * за этот пост.
dn8 оставлено 18.05.2026(UTC)
Offline Андрей *  
#34 Оставлено : 15 мая 2026 г. 18:42:35(UTC)
Андрей *

Статус: Сотрудник

Группы: Участники
Зарегистрирован: 26.07.2011(UTC)
Сообщений: 14,159
Мужчина
Российская Федерация

Сказал «Спасибо»: 618 раз
Поблагодарили: 2389 раз в 1880 постах
Главный вопрос:
cryptcp.x64.exe -sign -addchain -strict -detached -thumbprint {MyThumbprint} xmlBase64.txt

А почему в примере xmlBase64.txt?
Вы обязаны подавать в утилиту файл исходный, в правильной кодировке\бинарный. А не преобразованный предварительно в base64.

В post запросе (который внутри файла ...GOOD...) закодирован в base64 файл xml, да.
Но подписан то не base64 вариант, а сам xml (2762 байт), именно для него (xml) подпись успешно проходит (созданная при вызове из VBA).

Техническую поддержку оказываем тут
Наша база знаний
thanks 1 пользователь поблагодарил Андрей * за этот пост.
dn8 оставлено 18.05.2026(UTC)
Offline Андрей *  
#35 Оставлено : 15 мая 2026 г. 18:52:30(UTC)
Андрей *

Статус: Сотрудник

Группы: Участники
Зарегистрирован: 26.07.2011(UTC)
Сообщений: 14,159
Мужчина
Российская Федерация

Сказал «Спасибо»: 618 раз
Поблагодарили: 2389 раз в 1880 постах
Пришлите xmlBase64.txt, который подписывали в cryptcp.
Техническую поддержку оказываем тут
Наша база знаний
Offline Андрей *  
#36 Оставлено : 15 мая 2026 г. 19:06:24(UTC)
Андрей *

Статус: Сотрудник

Группы: Участники
Зарегистрирован: 26.07.2011(UTC)
Сообщений: 14,159
Мужчина
Российская Федерация

Сказал «Спасибо»: 618 раз
Поблагодарили: 2389 раз в 1880 постах
Для истории\зрителей:

внутри файла (post запрос - это тело запроса, вероятно) содержится:
json с идентификатором товара
base64(xml)
base64(der, цепочка, кроме корня)

Snimok ehkrana 2026-05-15 195546.png (5kb) загружен 0 раз(а).

И чтобы проверить корректность ЭП, на стороне сервера происходит:
1) декодирование байтов из строки base64Xml
2) декодирование байтов из строки signature
3) проверка ЭП\сертификатов...


p.s.
Но ошибка от сервера - по идее должна быть про ошибку с хешем, а не про сертификат, он один и тот же (в составе файлов из архива).
Техническую поддержку оказываем тут
Наша база знаний
Offline dn8  
#37 Оставлено : 18 мая 2026 г. 20:56:26(UTC)
dn8

Статус: Новичок

Группы: Участники
Зарегистрирован: 13.05.2026(UTC)
Сообщений: 6

Сказал(а) «Спасибо»: 5 раз
Автор: Андрей * Перейти к цитате
Signature Detached - BAD - made by cryptcp.x64.exe -strict -detached - GTIN 4070033672372.txt
Неправильное значение хеша
Хеш указан: 64BBBA4CDC05C8BD665BB8651579A3CD47D25E2504D1E3245C85268E8634DCA8

Я правильно понимаю, что "исходный xml" - один и тот же?
ЭТО ТОЧНО?

Потому что странно будет дальше изучать, если в post запросе с ЭП от cryptcp было что-то другое.

В файле GOOD - исходный xml, так?
И хеш там:
71EC64897F5575D1E257FF04239DCEA3FB755F65719DF7363E1C06815560C659

Скажите, пожалуйста, а как из Подписи извлечь хэш?

Автор: Андрей * Перейти к цитате
Главный вопрос:
cryptcp.x64.exe -sign -addchain -strict -detached -thumbprint {MyThumbprint} xmlBase64.txt

А почему в примере xmlBase64.txt?
Вы обязаны подавать в утилиту файл исходный, в правильной кодировке\бинарный. А не преобразованный предварительно в base64.

В post запросе (который внутри файла ...GOOD...) закодирован в base64 файл xml, да.
Но подписан то не base64 вариант, а сам xml (2762 байт), именно для него (xml) подпись успешно проходит (созданная при вызове из VBA).

Большое спасибо! Нашел свою ошибку. Я действительно передавал cryptcp.x64.exe файл для подписи с уже закодированными в base64 данными. И, соответственно, cryptcp.x64.exe их кодировала в base64 по 2-му кругу.

Вот такая команда формирует корректную Подпись для Публикации КТ в НК:
Код:
cryptcp.x64.exe -sign -strict -detached -thumbprint "YourThumbprint" YourFile.txt


На всякий случай напишу, почему передавал cryptcp.x64.exe данные в base64. Может кому полезно будет. Делал это автоматом, так же как и при работе с библиотекой CAdESCOM в VBA. Но там я задавал константу для CAdESCOM.CPSigner
Код:
Const CADESCOM_BASE64_TO_BINARY = 1 'означает, что входные данные приходят уже в base64


Автор: Андрей * Перейти к цитате
Для истории\зрителей:

внутри файла (post запрос - это тело запроса, вероятно) содержится:
json с идентификатором товара
base64(xml)
base64(der, цепочка, кроме корня)

Snimok ehkrana 2026-05-15 195546.png (5kb) загружен 0 раз(а).

И чтобы проверить корректность ЭП, на стороне сервера происходит:
1) декодирование байтов из строки base64Xml
2) декодирование байтов из строки signature
3) проверка ЭП\сертификатов...

Да, тело POST-запроса у АПИ-метода НК v3/feed-product-sign-pkcs следующее:

Код:
[
	{
		"goodId": "...",
		"base64Xml": "...",
		"signature": "..."
	}
]


goodId - уникальный Идентификатор КТ в НК
base64Xml - подписываемый XML КТ в base64
signature - XML КТ подписанная Открепленной Подписью

Цитата:

p.s.
Но ошибка от сервера - по идее должна быть про ошибку с хешем, а не про сертификат, он один и тот же (в составе файлов из архива).

Да, ошибка которую возвращает АПИ НК, в данном случае, не информативна - более того, вводит в заблуждение.

Отредактировано пользователем 18 мая 2026 г. 20:59:54(UTC)  | Причина: Не указана

Offline Андрей *  
#38 Оставлено : 18 мая 2026 г. 22:09:11(UTC)
Андрей *

Статус: Сотрудник

Группы: Участники
Зарегистрирован: 26.07.2011(UTC)
Сообщений: 14,159
Мужчина
Российская Федерация

Сказал «Спасибо»: 618 раз
Поблагодарили: 2389 раз в 1880 постах
Автор: dn8 Перейти к цитате

Большое спасибо! Нашел свою ошибку. Я действительно передавал cryptcp.x64.exe файл для подписи с уже закодированными в base64 данными. И, соответственно, cryptcp.x64.exe их кодировала в base64 по 2-му кругу.



Нет, программа хешировала файл "как есть" (base64 строку), а не xml данные. И подпись вычислялась для другого хеша данных в итоге.

Для COM - требуется кодировать, да.
Особенности представления данных в интерфейсе COM

Отредактировано пользователем 18 мая 2026 г. 22:10:44(UTC)  | Причина: Не указана

Техническую поддержку оказываем тут
Наша база знаний
thanks 1 пользователь поблагодарил Андрей * за этот пост.
dn8 оставлено 19.05.2026(UTC)
Offline Андрей *  
#39 Оставлено : 18 мая 2026 г. 22:23:09(UTC)
Андрей *

Статус: Сотрудник

Группы: Участники
Зарегистрирован: 26.07.2011(UTC)
Сообщений: 14,159
Мужчина
Российская Федерация

Сказал «Спасибо»: 618 раз
Поблагодарили: 2389 раз в 1880 постах
Автор: dn8 Перейти к цитате
Автор: Андрей * Перейти к цитате
Signature Detached - BAD - made by cryptcp.x64.exe -strict -detached - GTIN 4070033672372.txt
Неправильное значение хеша
Хеш указан: 64BBBA4CDC05C8BD665BB8651579A3CD47D25E2504D1E3245C85268E8634DCA8

Я правильно понимаю, что "исходный xml" - один и тот же?
ЭТО ТОЧНО?

Потому что странно будет дальше изучать, если в post запросе с ЭП от cryptcp было что-то другое.

В файле GOOD - исходный xml, так?
И хеш там:
71EC64897F5575D1E257FF04239DCEA3FB755F65719DF7363E1C06815560C659

Скажите, пожалуйста, а как из Подписи извлечь хэш?



В подписи (дословно) - нет хеша, это число.
Хеш есть в подписанных атрибутах (CMS).


icpsignerauthenticatedattributes2


пример (не проверял)


Код:
// 1. Создаем объект CadesSignedData
var oSignedData = await cadesplugin.CreateObjectAsync("CAdESCOM.CadesSignedData");

// 2. Загружаем CMS 
//    Предполагается, что переменная 'signatureBase64' содержит CMS в формате Base64.
//    Второй параметр определяет тип проверяемой подписи (например, CADESCOM_CADES_BES).
await oSignedData.VerifyCades(signatureBase64, cadesplugin.CADESCOM_CADES_BES);

// 3. Получаем коллекцию подписантов.
var oSigners = await oSignedData.Signers;

// 4. Получаем первого подписанта (их может быть несколько, порядок не гарантирован).
var oSigner = await oSigners.Item(1);

// 5. Получаем коллекцию его подписанных атрибутов.
var oAttributes = await oSigner.AuthenticatedAttributes2;

// 6. Получаем количество атрибутов.
var attrCount = await oAttributes.Count;
console.log("Найдено подписанных атрибутов: " + attrCount);

// 7. Перебираем атрибуты в цикле.
for (var i = 1; i <= attrCount; i++) {
    var oAttr = await oAttributes.Item(i);
    var attrName = await oAttr.Name;      // OID или имя атрибута
    var attrValue = await oAttr.Value;    // Значение атрибута
    console.log("Атрибут " + i + ": Name=" + attrName + ", Value=" + attrValue);
}



Техническую поддержку оказываем тут
Наша база знаний
thanks 1 пользователь поблагодарил Андрей * за этот пост.
dn8 оставлено 19.05.2026(UTC)
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Guest
4 Страницы«<234
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.