C# Подписание XML-документов с помощью XAdES

Мне нужно подписать xml шаблоном XAdES. Я использую 2 ссылки. Проблема со вторым, если я добавлю Transform, он будет работать нормально (signedXml.CheckSignature() возвращает True), без этого преобразования он вернет False.

мой код:

System.Security.Cryptography.Xml.Reference reference2; 
System.Security.Cryptography.Xml.SignedXml signedXml;
... 
reference2 = new Reference();
reference2.Type = "http://uri.etsi.org/01903/v1.1.1#SignedProperties";
reference2.Uri = "#SignedPropertiesId";
//reference2.AddTransform(new XmlDsigExcC14NTransform()); IF I COMMENT THIS LINE IT WONT WORK
signedXml.AddReference(reference2);

signedXml.ComputeSignature();
XmlElement xmlDigitalSignature = signedXml.GetXml();
xmlDoc.DocumentElement.AppendChild(xmlDoc.ImportNode(xmlDigitalSignature, true));

signedXml.CheckSignature(); //return false if dont use Transform in second REF

signedXml.ComputeSignature();
XmlElement xmlDigitalSignature = signedXml.GetXml();
xmlDoc.DocumentElement.AppendChild(xmlDoc.ImportNode(xmlDigitalSignature, true));

вторая часть подписи.

<ds:KeyInfo>
  <ds:X509Data>
    <ds:X509Certificate>cert...</ds:X509Certificate>
  </ds:X509Data>
</ds:KeyInfo>
<ds:Object>
  <xds:QualifyingProperties Target="#SignatureId">
    <xds:SignedProperties Id="SignedPropertiesId">
      <xds:SignedSignatureProperties>

это проблема в .NET?

Спасибо.


person jaka88    schedule 02.03.2012    source источник


Ответы (1)


Вы делаете это неправильно, узел для XAdES находится в узле подписи, после узла объекта вам нужно обычно вычислить подпись, а затем добавить узел объекта и необходимый узел, это можно легко сделать с помощью программирования, это зависит от уровня XAdES вы собираетесь реализовать.

person Ibrahim    schedule 19.03.2012