Случайно попалась на глаза эта тема.
Решил проверить что же мне СМЭВ совместно с ГИСГМП шлет.
За основу взял проверку подписи из примера SignSmevRequest.cs
получил следующее:
Код:Отправляем файл D:\ovi\Smev_bx\bin\Debug\r_pm4.Xml
Пишем ответ на диск: D:\ovi\Smev_bx\bin\Debug\t_pm4.Xml
проверка подписей: Найдено 2.
НЕ верна. Узел = smev:Header URI=#ID-302bdb92-19de-417d-827e-c19eb29e2e25
Сертификат = Сертификат ЭП-СМЭВ\Тестовый УЦ РТК (РТЛабс)
== верна. Узел = S:Body URI=#body
Сертификат = Федеральное казначейство\УЦ Федерального казначейства
ResultCode=0
ResultData=ID_fffbf362-b709-4d02-8ec9-a56fafcb9355
Я не знаю кто такая WCF, год назад попробовал, тяжело и неудобно.
Все ведь просто. Сделали из xml файла поток, отправили, приняли поток
ответа. Сохранили как xml. проверили и получили.
Если посмотреть на ответ СМЭВ, то видно что есть два узла wsse:Security
Для одного S:actor=".../recipient", а для другого S:actor=".../smev".
На что это влияет я не знаю, не разбирался.
Вторая подпись прекрасно проверяется стандартным signedXml
А вот если посмотреть на первую, то видно, что есть два элемента ds:Reference
ds:Reference URI="#ID-dab2a1bd-548a-417b-b8b2-731a3efa4fde"
- ссылка на smev:Header лежащий внутри S:Header
и ds:Reference URI="#body" - ссылка на S:Body
Сертификаты подписей присутствуют.
Так что ранее приведенное высказывание про Fidler
и подмену сертификата для проверки, скорее всего,
не верно.
Ранее я не думал об одновременной подписи нескольких узлов. нет необходимости.
Скорее всего при подписи надо:
signedXml.AddReference(reference1);
signedXml.AddReference(reference2);
signedXml.AddReference(reference3);
...
А вот как проверить идей нет. Так как СМЭВ фунциклирует, то проблема решаемая.
Но интересует решение на шарпе.
Кто нибудь решал эту проблему?Прилагаю ответ СМЭВ-а
t_pm4.Xml
(13kb) загружен 3 раз(а).