Подписание документов через компоненту Kalkan в 1С (обычные формы)

Добрый день.

Через 1С (самописная конфигурация на обычных формах) пытаюсь подписать данные для загрузки уведомления о ввозе из ЕЭАС.

Подписываю с использованием флагов KC_SIGN_CMS + KC_IN_BASE64 + KC_OUT_BASE64.

Далее эта подпись не подходит, пишет ошибка 500. Делаю подпись через образец, входящий в комплект разработчика \NCALayer\commonbundle_sample. Подписываю методом №5 без включения данных в подпись этим же сертификатом. Эта подпись подходит, сервер создает документ.

Сравниваю подписи, моя подпись через компоненту длиннее и нет в конце символов =. Подпись через файл примера короче и есть символы == в конце. Что я делаю не так? Почему компонента отдает такую подпись?

1 Симпатия

Выяснил, что с использованием таких флагов данные все равно включаются в подпись. Каким образом исключить их включение?

Добрый день! По какой библиотеке данные вопросы у вас? По NCALayer или COM?

В COM(Windows) библиотеке чтобы сделать подпись без включения данных, надо добавить еще флаг KC_DETACHED_DATA

Добрый день.
Подписываю через COM компоненту.
Указываю флаги KC_SIGN_CMS + KC_IN_BASE64 + KC_OUT_BASE64 + KC_DETACHED_DATA
(2+16+2048+64).
Получаю подпись. По длине эта подпись совпадает с подписью, полученной через файл NCALayer/commonbundle_sample/index.html.

Но, у подписи из компоненты в конце один символ =, а через файл == и подпись через компоненту не принимается, пишет ошибка выполнения запроса.
Подпись через файл нормально проходит и при выполнении запроса через Postman новый документ создается.

Вот образцы подписей, данные урезаны:

Подпись из файла MIIGXQYJKoZ…9GeZhlg== .
Подпись из компоненты MIIGXQYJKoZ…Azd+IqwA=

Я бы рекомендовал рассмотреть идею подписания из 1С с помощью NCALayer, так как во-первых NCALayer - это отработанный вариант (вы в этом уже убедились), во-вторых NCALayer поддерживает все типы носителей ключей (и файлы и токены и карты).

На сколько мне известно, библиотека WebSocket для 1С существует, так что особых сложностей с интеграцией быть не должно.

Добрый день! Можете уточнить куда вы пытаетесь отправить полученную подпись? Что там должно происходить?

Добрый день.
Мне нужно через API загружать уведомление о ввозе из ЕАЭС.
Делаю все в соответствии с инструкцией версии 2.17, 2.16.
То есть, мне нужно отправить POST, двумя тегами:
content: файл ХМЛ, сформированный по формату из документации преобразую в формат Base64.
signature: значение тега content подписываю ЭЦП (ghost), методом №5 без включения данных в подпись. Флаги: KC_SIGN_CMS + KC_IN_BASE64 + KC_OUT_BASE64 + KC_DETACHED_DATA.
При отправке curl запроса через postman:
если сигнатуру беру из файла образца, то все нормально, документ создается
если сигнатуру беру из компоненты, то ошибка формата запроса.
Отправка запроса идет на elk.prod.markirovka.ismet.kz/api/v3/true-api/edo-api/outgoing-documents/formal.
Хотелось бы сделать через компоненту, т.к. мы также работаем с маркировкой в РФ, и там также все подписание идет через компоненты криптопровайдера (Крипто Про).
Можете оставить контакты, я могу дать образцы curl запроса и/или программного кода.

Ответил в сообщении.

Здравствуйте, а какое в итоге решение данной проблемы?

Здравствуйте. Нужно было правильно выставить флаги при передаче данных в компоненту.
KC_SIGN_CMS = 2;
KC_IN_BASE64 = 16;
KC_DETACHED_DATA = 64;
KC_OUT_BASE64 = 2048;
Флаги = KC_SIGN_CMS + KC_IN_BASE64 + KC_DETACHED_DATA + KC_OUT_BASE64;