Отправка документов через API - подписание клиентским ключом

Все вопросы по обмену электронными счетами-фактурами, внутреннему и внешнему документообороту, а также по работе системы для межведомственного документооборота.

Отправка документов через API - подписание клиентским ключом

Не могу победить отправку документов через API с использованием локального ключа. Криптопровайдер не используется. Есть закрытая (pfx / PEM) и открытая (*.cer) часть ЭП.
У вложений заполняю поля ДвоичныеДанные,Имя,Тип,Хеш
метод ЗаписатьДокумент() успешно проходит
метод ПодготовитьДействие() с действием "Отправить" возвращает ошибку "Данные сертификата не переданы, также не был найден подходящий серверный сертификат"
Авторизуюсь в API под пользователем у которого сертификат не серверного хранения.

Как я понимаю, если я передаю хеш - то все данные по сертикату которым он был подписан уже внутри?
С другой стороны смотрел внешнюю обработку для 1С 8, и судя по коду, там для пользователя запрос доступных сертификатов и проверка типа ключа = Клиентский. Т.е. как понимаю даже для не серверных сертификатов - все-равно метод СписокСертификатов() должен что-то вернуть?

Как правильно формировать документы через API с подписью локальным ключом? На каком этапе считать хеш? Нужно ли что-то заполнять в Документ - Этап - Действие - Сертификат ?
До этого пару лет успешно работали с подписанием сертификатами с серверным хранением.

Кто сталкивался?
timka05 
» 27 фев 2018, 18:04


timka05
Посмотрите статью.
Раздел "Если подписание выполняется в вашей ИС"
Ткаченко Дмитрий 
» 28 фев 2018, 12:55


Смотрел конечно. Хеш считаю и передаю еще в метода

Ткаченко Дмитрий писал(а):timka05
Посмотрите статью.
Раздел "Если подписание выполняется в вашей ИС"

Смотрел конечно.
Хеш считаю и передаю еще в метод ЗаписатьДокумент()
Больше непонятно что подразумевается под пунктом
- Сформировать ЭП по криптографическому хешу.

Есть открытая и закрытая части ЭП, что и как надо сформировать?

Причем подписание клиентской ЭП для провайдера ЭДО КорусКонсалтинг работает давно и на ура. Т.е. собственно с подписями и алгоритмами расчета хеша все правильно.
timka05 
» 28 фев 2018, 16:27


timka05
Есть открытая и закрытая части ЭП, что и как надо сформировать?

При интеграции по API и использовании локального ключа все криптографические операции вы должны выполнять самостоятельно.
Если ваша учетная система не умеет формировать подписи под файлами, то возможно вам стоит рассмотреть интеграцию через SDK.
Ткаченко Дмитрий 
» 02 мар 2018, 10:33


Ткаченко Дмитрий писал(а):При интеграции по API и использовании локального ключа все криптографические операции вы должны выполнять самостоятельно.
Если ваша учетная система не умеет формировать подписи под файлами

Дмитрий, учетная система позволяет все, что угодно. И криптографичекие операции все выполняются на ура. Проблема абсолютно не в этом.
Вопрос в том, как правильно составить тело запроса в JSON для API СБИС. с подписанием локальным ключом.
Что конретно заполнять в Документ - Этап - Действие - Сертификат ? https://sbis.ru/help/integration/api/al ... object/#12
Хеш считать сразу же, при вывозе метода метода ЗаписатьДокумент()
или все же при вызове метода ПодготовитьДействие(), судя по всему - второй вариант.

Хватило бы 3-х примеров с телом запроса с подписанием локальным ключом.
1. Метод ЗаписатьДокумент()
2. ПодготовитьДействие()
3. ВыполнитьДествие()

Если можно - выложите такие примеры (конечно без перс.данных и прочих коммерчески важных вещей), ИНН/КПП/Наименование там затереть, отпечатки ключей...
timka05 
» 05 мар 2018, 11:17



Ткаченко Дмитрий
Спасибо, буду смотреть.
timka05 
» 05 мар 2018, 13:20


Ткаченко Дмитрий, запрос к API СБИС составить получилось. Спасибо.
Но осталась другая проблема.
Ошика проверки ЭП: подпись недействительна, не соответствует файлу или испорчена.
Подписываю через openssl
Сертификат с закрытым ключом с токена вытаскиваю утилитой P12FromGostCSP т.к. контейнеры КриптоПро имеют формат несовместимый с openssl, это известная заморочка.
https://www.cryptopro.ru/forum2/default ... sts&t=6270
https://habrahabr.ru/post/187574/
Конвертирую в PEM формат, с которым работает openssl
Подписываю
Код: Выделить всё
openssl smime -sign -in test.txt -out test.txt.sgn -signer cert.pem -outform DER

Проверяю
Код: Выделить всё
openssl smime -verify -in test.txt.sgn -content test.txt -signer cert.pem -inform DER

и получаю
Код: Выделить всё
Verification failure
unable to get local issuer certificate

Который день воюю - ничего не получается.
Причем аналогичное подписание файлов тем же openssl для провайдера ЭДО Корус Консалтинг - проходит на ура.

Кто сталкивался? у кого может есть опыт с openssl - наверняка я где-то косячу.
timka05 
» 20 мар 2018, 10:53


Судя по всему openssl не находит сертификаты уровнем выше (УЦ, корневой, ...)
Хотя все сертификаты которые указаны в CA Issuers скачал
Код: Выделить всё
openssl x509 -in cert.pem -text -noout | grep -i issuer
            Authority Information Access:
                OCSP - URI:http://tax4.tensor.ru/ocsp-uc_tensor/ocsp.srf
                CA Issuers - URI:http://tax5.tensor.ru/pub/uc_tensor-2017.crt
                CA Issuers - URI:http://crl.tensor.ru/tax5/ca/uc_tensor-2017.crt
                CA Issuers - URI:http://crl2.tensor.ru/tax5/ca/uc_tensor-2017.crt
                CA Issuers - URI:http://crl3.tensor.ru/tax5/ca/uc_tensor-2017.crt
                CA Issuers - URI:http://tax4.tensor.ru/tsp/tsp.srf


скачал и подложил куда надо, указывал и ручками через опции -CAfile и -CApath
Код: Выделить всё
openssl verify cert.pem -CAfile uc_tensor-2017.crt.pem
error 20 at 0 depth lookup:unable to get local issuer certificate
timka05 
» 23 мар 2018, 18:27


timka05
Описанная проблема возникает из-за того, что на подпись приходит не сам документ, а его хэш. В описанном варианте при подписи от хэша ещё раз вычисляется хэш, поэтому подпись не валидна. Функции создания ASN.1 подписи по хэшу в openssl не нашли, только подпись самого хэша:
openssl dgst -engine gost -sign cert.pem -out res.sgn some-file

Результат нужно будет оборачивать в ASN.1 структуру signedData.
Ткаченко Дмитрий 
» 30 июл 2018, 15:49




Вернуться в Электронный документооборот