26 (2017-08-09 13:43:28 отредактировано apirogov)

Re: Работа с API. C# quick start

А вы уверены что проблема именно в этом?
upd: снял галочку Prefer 32 bit и вроде заработало. Просит пароли от рутокена уже)) Так что скорее всего проблема была именно в этом. Установки справочника на 32бит будет достаточно?

upd #2: Установили ещё и 32бит справочник. Взлетела инициализация.

27 (2017-08-16 13:27:27 отредактировано apirogov)

Re: Работа с API. C# quick start

Здравствуйте!

Изучив 4ую версию документа и получив информацию что нужно делать как написано в разделе "ЗАЩИТА ЭЛЕКТРОННЫХ СООБЩЕНИЙ (ПАКЕТОВ ЭС) С ПОМОЩЬЮ КА" получилось следующее:

1 - сам xml сформировали(ED-###);
2 - подписали получив byte[] sign;
3 -

var sigInBase64 = Convert.ToBase64String(sign);
                var xmlSigInBase64 = "<dsig:MACValue xmlns:dsig=\"urn:cbr-ru:dsig:v1.1\">" + sigInBase64 + "</dsig:MACValue>";
                var dataInBase64 = Convert.ToBase64String(data);
                var xmlDataInBase64 = "<sen:Object>" + sigInBase64 + "</sen:Object>";
xmlPackage = "<sen:SigEnvelope xmlns:sen=\"urn:cbr-ru:dsig:v1.1\">"
                    + "<sen:SigContainer>"
                    + xmlSigInBase64
                    + "</sen:SigContainer>"
                    + xmlDataInBase64
                    + " </sen:SigEnvelope>";
                var resultFilePath = Path.Combine(Path.GetDirectoryName(fileName), Path.GetFileNameWithoutExtension(fileName) + "Signed.xml");

Собственно вопрос в том, что верно ли сформировано тело xmlPackage. Всё ли верно "орбернул" в тэги? Или может чего-то не хватает/лишнее ?

Вот что получилось:
<sen:SigEnvelope xmlns:sen="urn:cbr-ru:dsig:v1.1">
    <sen:SigContainer>
        <dsig:MACValue xmlns:dsig="urn:cbr-ru:dsig:v1.1">MIIBYAYJKoблаблаблаRJFD6M=</dsig:MACValue>
    </sen:SigContainer>
    <sen:Object>MIIBYAблаблаблаD6M=</sen:Object>
</sen:SigEnvelope>

28 (2017-08-18 16:04:34 отредактировано apirogov)

Re: Работа с API. C# quick start

Предположительно ошибка найдена. Заключалась она в шапке файла:
"<?xml version="1.0" encoding="WINDOWS-1251"?>
<sen:SigEnvelope xmlns:sen="urn:cbr-ru:dsig:env:v1.1">"     Жду когда ответственные "гаврики" подсунут xml'ки в АРМ КБР-Н.

Так же отмечаю, что тут есть примеры подписанных файлов если кому вдруг пригодится. Подписанные пакеты выглядят несколько иначе. Словно набор подписанных одиночек. Большая часть файлов с точки зрения понимания структуры подписи конечно полный мусор, но некоторые наглядны.

29 (2017-08-23 16:16:13 отредактировано apirogov)

Re: Работа с API. C# quick start

Пробуем в разных вариантах обёртки скормить КБР-Н'у файлы с подписью. Стандартные вещи на что он ругался были:
- Файл недопустимого типа. Ожидается сообщение в служебном конверте;
- Сообщение не зашифровано или формат сообщения искажен   (код: 0xE0700083).

Первое для наших файлов обёрнутых разными способами и для файлов примеров с сайта ЦБ. Второй вариант ошибки был для файла примера с сайта ЦБ (файл PacketEPD_SOAP.xml).

Затем сделали свой согласно этому SOAP. Получили вот такую ошибку:
Error 21.08.2017 13:14:37.99 MSK-0974 OBT_oper_test kbr-rcv
111Signed - копия (4).xml: System.Exception: Неверный тип сообщения в формате PKCS#7   (код: 0xE0700022)
   в uarm.Common.Sign.SignProxy.Decode(String strEncFileName, String strDatFileName)
   в uarm.Gate.SAX.GateRcv.process(String filename)
   в uarm.Gate.GateBase.processMain()


upd #2: После всех приключений мы дошли до стадии того, что документ подписан КА. Для этого вызывалась функция ППИ 

SignParameters sp = new SignParameters();
                sp.Pkcs7 = true;
                sp.Detached = true;
                byte[] sign = vcertCtx.SignMemory(sp, data, null);

однако система ругнулась что необходимо защищать(подписывать) файл способом другим.

116Signed - копия (2).dat
Info 22.08.2017 13:52:07.53 MSK-0974 OBT_oper_test kbr-snd
Начало обработки файла 116Signed - копия (2).dat

Info 22.08.2017 13:52:07.55 MSK-0974 OBT_oper_test kbr-snd
КА проверен. Владелец <CN=PROCESSING501,OU=4525161000,O=KO161,L=REGRNP,ST=45,C=RU>

Error 22.08.2017 13:52:07.55 MSK-0974 OBT_oper_test kbr-snd
116Signed - копия (2).dat: System.ApplicationException: Несоответствие варианта защиты: требуется Вариант 2 - ЗК на весь пакет, получили Вариант 1 - не формировать ЗК
   в uarm.Gate.GateBase.checkZKMethod(String strFileName, ZKMethod pZKMethod)
   в uarm.Gate.GateBase.CheckZK(String strFileName, ZKMethod pZKMethod)
   в uarm.Gate.GateBase.checkSign(Stream streamKA, ZKMethod pZKMethod)
   в uarm.Gate.SAX.GateSnd.process(String filename)
   в uarm.Gate.GateBase.processMain()


Из сообщения понимаем это как то, что должен быть и КА и ЗК. Значит алгоритм несколько иной. Надо вызывать подпись ЗК, а потом подпись КА на результат подписанного ЗК документа.


upd #3: Для подписи ЗК из api ППИ использовали:

SignParameters sp = new SignParameters();
                sp.Pkcs7 = true;
                sp.Detached = true;
                byte[] sign = vcertCtx.SignMemory(sp, data, null);

Получили следующую ошибку:

Info 22.08.2017 18:19:30.85 MSK-0974 OBT_oper_test kbr-snd
Начало обработки файла 117Signed.xml

Info 22.08.2017 18:19:31.10 MSK-0974 OBT_oper_test kbr-snd
КА проверен. Владелец <CN=PROCESSING501,OU=4525161000,O=KO161,L=REGRNP,ST=45,C=RU>

Error 22.08.2017 18:19:31.24 MSK-0974 OBT_oper_test kbr-snd
117Signed.xml: System.ApplicationException: Проверка ЗК: System.Exception: Подпись недостоверна   (код: 0xE0700042)
   в uarm.Common.Sign.SignProxy.verifyResult(Boolean result, VerifyResultCollection vrc)
   в uarm.Common.Sign.SignProxy.Check(String strDataFileName, String strSignFileName, CertInfo& info)
   в uarm.Gate.GateBase.checkZKWhole(String filename)
   в uarm.Gate.GateBase.checkZKWhole(String filename)
   в uarm.Gate.GateBase.CheckZK(String strFileName, ZKMethod pZKMethod)
   в uarm.Gate.GateBase.checkSign(Stream streamKA, ZKMethod pZKMethod)
   в uarm.Gate.SAX.GateSnd.process(String filename)
   в uarm.Gate.GateBase.processMain()


В чём может быть причина? Что можете сказать по этому коду ошибки ?

30

Re: Работа с API. C# quick start

Где получить все коды ошибок списком? чтобы можно было изучать их

31

Re: Работа с API. C# quick start

ау

32

Re: Работа с API. C# quick start

Добрый день!

Коды ошибок можно посмотреть в файле vcerterr.h
Вопросы по ошибкам при работе с АРМ КБР нужно задавать разработчикам АРМ КБР (это не Валидата).

33

Re: Работа с API. C# quick start

Хорошо, спасибо.

Подскажите пожалуйста как с ними связаться (с разработчиками АРМ КБР) ?

P.S: Я бы с удовольствием наконец-то решил вопрос и поделился бы решением с другими, кто мучается на круг не меньше моего. Меня, как программиста, жутко бесит, что приходится заниматься не программированием, а выискиванием всяких подобных сведений, которые скорее всего больше в жизни нигде и никогда не пригодятся. Уже зла не хватает на это. Потому буду искренне признателен если сможете помочь наконец решить эту чёртову загадку под кодовым названием "УФЭБС".

34

Re: Работа с API. C# quick start

К сожалению, контактов разработчиков АРМ КБР у нас нет.

35 (2017-08-25 12:49:17 отредактировано Saches)

Re: Работа с API. C# quick start

apirogov пишет:

.........Подскажите пожалуйста как с ними связаться (с разработчиками АРМ КБР) ?.......
......Я бы с удовольствием наконец-то решил вопрос и поделился бы решением с другими, кто мучается на круг не меньше моего. ........

Вы вопросы свои задаете, ну совершенно не по адресу.
Вам же уже написали (и даже ссылки привели), что больше всего разработчиков по этой тематике тусуется на форуме сайта bankir.ru в ветке автоматизаторов. В чем проблема озвучивать свои вопросы именно там? А если Вы поделитесь там своими наработками по данной тематике, Вам еще и спасибо скажут.
Разработчиком АРМ КБР и УФЭБС является Центральный Банк Российской Федерации. Естественно, документация лежит на сайте ЦБ  - cbr.ru. В документации указано подразделение ЦБ, которое занимается разработкой АРМ КБР. Но сможете ли Вы получить от них ответ, это совсем другой вопрос, и не для этого форума. Это я к тому, что Вам уже предоставили всю необходимую информацию, что бы понять, в каком направлении двигаться дальше.
И не стоит разливать здесь свой негатив. Умение находить и получать необходимую информацию, полезный навык не только для программиста. но и для специалиста любой профессии. А начинать тут, КМК, имеет смысл с  нахождения правильного места получения необходимой информации. Разговоры "мне никогда больше в жизни это не понадобится" - типичные подростковые грабли с гравировкой на черенке "Не проходите мимо". Уж извините.
Удачи!

ЗЫ:И такое впечатление, что у компании, где Вы работаете, понимание требований ПП-313 достаточно поверхностное. К сожалению.

36

Re: Работа с API. C# quick start

Я уже понял, что Вы ответили на всё что могли. Спасибо. Негатив был и остаётся, но как Вы правильно заметили, что он не по адресу.
А то, где работаю, к сожалению да.. не могут предоставить всю необходимую информацию заранее. Даже то, что мне ППИ нужен не знали. И именно потому и расстраивает, что нельзя просто сесть и сказать что "Как предоставите необходимые данные, так и получите результат". А то как всю документацию приходится добывать жуткий "савок". Вот и все грабли..

37 (2017-08-25 15:50:11 отредактировано Saches)

Re: Работа с API. C# quick start

Зато, у Вас есть реальная возможность стать самым компетентным специалистом по данному направлению!))
Первопроходцам всегда тяжелее, чем тем, кто двигается уже проторенным путем.
И поаккуратней с желанием поделиться своими наработками. Дело это конечно весьма благородное, но т.к. код Вы пишете за з/п, права на исходники формально принадлежат работодателю. Ну а знаниями делиться никто не запрещает.
Ждем Вас на bankir-е.))

38 (2017-09-07 16:56:44 отредактировано apirogov)

Re: Работа с API. C# quick start

Здравствуйте ещё раз!

На текущий момент нам наконец-то выдали 2 разных ключа на КА и ЗК. В Справочнике сертификатов создали 2 профиля на KA и на ZK. Смогли их загрузить и подписать. Проверка в КБР выдаёт ошибку: "Проверка ЗК: System.Exception: Подпись недостоверна   (код: 0xE0700042)"

801SignedKA.xml
Info 05.09.2017 18:13:32.52 MSK-0974 OBT_oper_test kbr-snd
Начало обработки файла 801SignedKA.xml

Info 05.09.2017 18:13:32.54 MSK-0974 OBT_oper_test kbr-snd
КА проверен. Владелец <CN=CONTROL100,OU=4525161000,O=KO161,L=REGRNP,ST=45,C=RU>

Error 05.09.2017 18:13:32.66 MSK-0974 OBT_oper_test kbr-snd
801SignedKA.xml: System.ApplicationException: Проверка ЗК: System.Exception: Подпись недостоверна   (код: 0xE0700042)
   в uarm.Common.Sign.SignProxy.verifyResult(Boolean result, VerifyResultCollection vrc)
   в uarm.Common.Sign.SignProxy.Check(String strDataFileName, String strSignFileName, CertInfo& info)
   в uarm.Gate.GateBase.checkZKWhole(String filename)
   в uarm.Gate.GateBase.checkZKWhole(String filename)
   в uarm.Gate.GateBase.CheckZK(String strFileName, ZKMethod pZKMethod)
   в uarm.Gate.GateBase.checkSign(Stream streamKA, ZKMethod pZKMethod)
   в uarm.Gate.SAX.GateSnd.process(String filename)
   в uarm.Gate.GateBase.processMain()


Можете подсказать из-за чего может быть такая ошибка?

39

Re: Работа с API. C# quick start

Подпись недостоверна   (код: 0xE0700042), это значит что не проверилась ЭП. Скорее всего данные передаваемые при формировании ЗК и проверке отличаются друг от друга. Похоже что Ваш алгоритм подготовки данных для формирования ЗК отличается от АРМ КБР. Если я правильно понял, то с КА все успешно?

40 (2017-09-07 18:10:11 отредактировано apirogov)

Re: Работа с API. C# quick start

Да, с КА всё успешно. пишет что КА проверен. А вот с ЗК печаль(
   Тот вывод, что Вы написали, мы тоже к нему склонялись. Просто если проблема в этом, то тут остаётся только гадать как именно выглядит набор байт которые в итоге получаются у КБРа для проверки.
Либо:
- не так нормализовали как КБР
- не так канонизировали
- просто не туда засунул подпись ЗК(самый просто вариант и менее вероятный)

Для канонизации использовал Microsoft трансформации(класс XmlDsigC14NTransform и алгоритм

.Algorithm = SignedXml.XmlDsigC14NTransformUrl;

)

41

Re: Работа с API. C# quick start

К сожалению, я здесь бессилен...

42 (2017-09-08 12:07:29 отредактировано apirogov)

Re: Работа с API. C# quick start

Ура, нам выделили человека в МЦОИ, который будет отвечать на вопросы!
По крайней мере в теории этот человек считается компетентным для ответов на вопросы по КБРам, встраиванию и проблемам с настройками, с ЗК *смайл рожа полная надежды*

Правда по кодам ошибок меня уже отправили к Сигнатуре. Сказали что "У нас кодов нету, идите за ними к Сигнатуре". Правильно ли я понимаю что "к Сигнатуре" это к Вам? Если да, то можете сказать будет ли на нормализацию(если проблема в ней) какой-то специфический код ошибки (отличный от "Подпись недостоверна   (код: 0xE0700042)")?

43

Re: Работа с API. C# quick start

Сигнатура  ничего не знает о нормализации и канонизации, она только принимает массив байт и проверяет ЭП, ей все равно как этот массив байт был получен, соответственно, никаких специальных кодов кроме "Подпись недостоверна   (код: 0xE0700042) Вы не получите.

44

Re: Работа с API. C# quick start

Добрый день!

Забыл написать, что в итоге все вопросы решил. Нашёл в чём причина была. Теперь всеми тремя вариантами подписывается и валидируется успешно в КБР-Н.

Спасибо за помощь и терпение!

45

Re: Работа с API. C# quick start

Всегда рады помочь big_smile