Добрый день! Подписываю сообщение для СМЭВ следующим образом:
MySignedXml signedXml = new MySignedXml(doc);
signedXml.SigningKey = certificate.PrivateKey;
var reference = new Reference()
reference.Uri = "#body";
reference.DigestMethod = "http://www.w3.org/2001/04/xmldsig-more#gostr3411";
var c14 = new XmlDsigExcC14NTransform();
reference.AddTransform(c14);
signedXml.AddReference(reference);
var keyInfo = new KeyInfo();
keyInfo.AddClause(new KeyInfoX509Data(certificate));
signedXml.KeyInfo = keyInfo;
signedXml.SignedInfo.CanonicalizationMethod = c14.Algorithm;
signedXml.SignedInfo.SignatureMethod = "http://www.w3.org/2001/04/xmldsig-more#gostr34102001-gostr3411";
signedXml.ComputeSignature();
XmlElement xmlDigitalSignature = signedXml.GetXml();
doc.GetElementsByTagName("ds:Signature")[0].PrependChild(doc.ImportNode(xmlDigitalSignature.GetElementsByTagName("SignatureValue")[0], true));
doc.GetElementsByTagName("ds:Signature")[0].PrependChild(doc.ImportNode(xmlDigitalSignature.GetElementsByTagName("SignedInfo")[0], true));
doc.GetElementsByTagName("ds:Signature")[0].PrependChild(doc.ImportNode(xmlDigitalSignature.GetElementsByTagName("KeyInfo")[0], true));
doc.GetElementsByTagName("wsse:BinarySecurityToken")[0].InnerText = Convert.ToBase64String(certificate.RawData);
Без строки doc.GetElementsByTagName("ds:Signature")[0].PrependChild(doc.ImportNode(xmlDigitalSignature.GetElementsByTagName("KeyInfo")[0], true)); выдается ошибка SMEV-100016: При обработке запроса произошла ошибка: Не верный формат раздела Security
Если же оставить эту строку, возвращается: SMEV-100003: При обработке запроса произошла ошибка: Неверная ЭП сообщения.
Опиралась на рекомендации, приведенные в примере
https://www.cryptopro.ru...olzovaniem-kriptopro-netВижу, что там в процессе проверки подписи фигурирует
XmlNodeList referenceList = signedXml.KeyInfo.GetXml().GetElementsByTagName("Reference", WSSecurityWSSENamespaceUrl);
if (referenceList.Count == 0)
{
throw new XmlException("Не удалось найти ссылку на сертификат");
}
но ссылка как таковая не добавляется в примере...
Возможно, конечно, проблема не в KeyInfo, тогда в чем?