Автор: strelok671 Приветствую!
Тут не один раз уже спрашивали...
Спасибо, посмотреть на чужое творчество всегда полезно.
Однако возникли вопросы.
То что вы строите soap обертку на лету, а я использую шаблон - это личные предпочтения.
Далее я увидел:
xmlObj.XmlDoc.GetElementsByTagName(SOAP_DS_PREF + ":Signature")[0].PrependChild(
xmlObj.XmlDoc.ImportNode(
xmlDigitalSignature.GetElementsByTagName("SignedInfo")[0], true));
и вы используете SmevSignedXml signedXml = new SmevSignedXml(xmlObj.XmlDoc);
на основе стандартной SignedXml.
- У меня в результате подобного получалась структура подписи
<ds:Signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
<SignedInfo xmlns="http://www.w3.org/2000/09/xmldsig#">
...
и СМЭВ, совместно с гисгмп, ругался - SMEV-10003 Неверная ЭЦП
Я не смог на основе стандартной SignedXml получить <ds:SignedInfo...
Если использовать SignedXmlPrefix,
то там идет установка префикса после расчета подписи...
и тоже SMEV-10003
Решилось просто. Берем SmevSignRequest, из примеров КриптоПро,
и меняем SmevSignedXml signedXml = new SmevSignedXml(doc);
на XadesSignedXml signedXml = new XadesSignedXml(doc);
и видим что "SignedInfo" и все остальное имеет префикс.
соответственно меняем момент вставки подписи - .GetElementsByTagName("ds:SignedInfo")
Все. СМЭВ доволен.
Осталось добавить timestamp, но это как нибудь потом...
Сейчас меня более интересует что я не могу проверить транспортную подпись СМЭВ.
И не могу проверить, мною же подписанные, N элементов FinalPayment в одном пакете