Имя: Пароль:
1C
1С v8
Менеджер криптографии и проверка ЭЦП (РБ)
0 Amig0_0
 
15.03.21
12:37
Всем доброго времени суток!

Столкнулся давеча с проблемой. Проблема очень узкоспециализированная и если вдруг у кого возникнут мысли - буду безмерно благодарен за помощь!!!

Модифицировал клиенту внешнюю печатную форму (банально добавил на нее должность подписывающего) и заменил в "Печатных формах, отчетах и обработках". Все было хорошо, но с того момента
через пару дней, стали замечать, что из документаоборота некоторые файлы начали приходить с ошибкой. Предыдущий разработчик классифицировал это ошибку как "ошибку проверки подписей документа".

За сверку подписей отвечает

МенеджерКрипто.ПроверитьПодпись(ДанныеПДФ,ДанныеПодписи);

ДанныеПДФ - это ПДФ файл - печатная форма о которой я говорил выше. Я проверил, это именно она, с добавленной мною должностью. После подписи , этот ПДФ сохраняется как двоичные данные и хранится в документе.
В момент подписи происходит следующее:

>>>
  ИмяФайла = КаталогВременныхФайлов() + СокрЛП(Акт.УникальныйИдентификатор()) + ".pdf";

  ТаблДок.Записать(ИмяФайла,ТипФайлаТабличногодокумента.PDF);
  ДанныеФайла = Новый ДвоичныеДанные(ИмяФайла);
  ДанныеПодписи = МенеджерКрипто.Подписать(ДанныеФайла,Сертификат);
>>>

ДанныеФайла это третично упомянутая ПФ, сохраненная в ПДФ и подписанная ключом.

В момент принятия возвращенного файла, менеджер криптографии проверяет подпись "ПроверитьПодпись". Я так понимаю, он проверяет, подписан ли ИМЕННО этот пдф файл, который мы отправили
документообороту. Это проиисходит так:

>>>
//ищем ссылку в базе
ФлПроверкиПодписей = Истина;
ДанныеПДФ = Док.ДокументПДФ.Получить();
Для а = 0 по МассивПодписей.Количество()-1 цикл
    ДанныеПодписи = МассивПодписей[а];

    Попытка
       МенеджерКрипто.ПроверитьПодпись(ДанныеПДФ,ДанныеПодписи);

    Исключение
       ФлПроверкиПодписей = Ложь;
    КонецПопытки;          

КонецЦикла;

Если ФлПроверкиПодписей  Тогда
    ...
>>>

Раз через раз отрабатывает исключение! Самое печальное, что при повторном переотправлении из документооборота, документ может обработаться успешно...
Проблемы на стороне документооборота можно отмести, т.к. заказчик работает с нескольким десятком контрагентов. У большинства из них различные документообороты.
Да и факт того, что ранее (до того, как я изменил ПФ) все работало корректно. Во всяком случае так говорит заказчик=)

Акт в документооборот отправляется правильный. Кэш почистили.

Кто - нибудь сталкивался с подобными проблемами? Есть идеи в какую сторону "копать"? За любую помощи и мысли буду благодарен!
1 Garykom
 
гуру
15.03.21
12:40
(0) Тебя разводят
2 Amig0_0
 
15.03.21
12:42
(1) последние пару ночей, искренне на это надеюсь
3 Amig0_0
 
15.03.21
16:58
такое ощущение, что Док.ДокументПДФ перезаписывается в какой-то момент и таким образом отличается от того, который уходит в документооборот. но в коде нет ни одного момента, где бы этот реквизит перезаписывался. Нагуглил, что проблема может быть в Криптопровайдере (в нашем случае Авест), но документации по хоть отдаленным причинам возникновения проблем - нет!
4 mistеr
 
15.03.21
17:38
(0) Странный код проверки подписи. Там может быть исключение по десятку причин, помимо неверной подписи. Но реальная ошибка просто глотается. Руки бы отрывать за такой код.

Добавь логирование в ЖР информации об ошибке.
5 Amig0_0
 
16.03.21
08:50
(4) =)) 100% согласен с вами. Знаете, что в этом коде самое бесючее? То , что это ПопыткаИсключение находится в процедуре, которая тоже находится в ПОПЫТКЕ! Это кем нужно быть, чтобы запускать подобного масштаба функционал (около 100 обменов в день) с такой реализацией?!

Логирование добавил, это помогло выявить место в котором всё крашится
6 Amig0_0
 
16.03.21
08:56
(4) а вы работали с Авестом? не подскажете, почему реализация может обрабатывать входящие письма пачками по 10 штук? Ограничение указано программно. Порой пачки приходят по 20+ штук. В таком случаи разбиваются на группы по 10 и обрабатываются по очереди. В интернете инфы на эту тему нет. Может Авест принимает именно по 10 штук, а тут было какое - то обновление?? Что могло поломаться...
7 mistеr
 
16.03.21
09:22
(6) Нет, не работал. Лучше спросить у Авеста.
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший