Подпись XML в VB.NET IolaCOM2
(0 чел.) 
  • Страница:
  • 1

ТЕМА: Подпись XML в VB.NET IolaCOM2

Подпись XML 4 года, 6 мес. назад #1461

  • Roman0888
  • Новый участник
  • Постов: 3
  • Репутация: 0
Здравствуйте. Я пишу свою программу на VB.Net которая отправляет в SOAP запросе- подписанный при помощи ЭЦП xml .
Но подписав я получаю ответ от сервера - ошибку проверки подписи XML.
До подписи xml выглядит так:

<XML>
<data>
.......
......
</data>


в результате подписания должен выглядеть так:

<XML>
<data>
.......
......
</data>
<ds:Signature xmlns:ds=" www.w3.org/2000/09/xmldsig#" Id="1">
<ds:SignedInfo>
<ds:CanonicalizationMethod Algorithm=" www.w3.org/TR/2001/REC-xml-c14n-20010315"/>
<ds:SignatureMethod Algorithm=" www.w3.org/2001/04/xmldsig-more#rsa-sha1"/>
<ds:Reference URI="">
<ds:Transforms>
<ds:Transform Algorithm=" www.w3.org/2000/09/xmldsig#enveloped-signature"/>
<ds:Transform Algorithm=" www.w3.org/TR/2001/REC-xml-c14n-20010315...hComments"/>
</ds:Transforms>
<ds:DigestMethod Algorithm=" www.w3.org/2001/04/xmldsig-more#sha1"/>
<ds:DigestValue>dR.....7...E=</ds:DigestValue>
</ds:Reference>
</ds:SignedInfo>
<ds:SignatureValue>VaL.......=</ds:SignatureValue>
<ds:KeyInfo>
<ds:X509Data>
<ds:X509Certificate>MIIIE........G</ds:X509Certificate>
</ds:X509Data>
</ds:KeyInfo>
</ds:Signature>
</XML>

После подписи у меня отсутствует префикс "ds:" , и разные SignatureValue , если сравнивать с сторонней программой которая подписывает xml - которую принимает сервер.Этот префикс должен присутствовать в подписи обязательно.

Префикс ds: я прописываю в ручную в VB.NET каждой ноде - вот только не знаю правильно это или нет.

Не могли бы вы мне помочь разобраться или прислать пример кода, как подписать xml средствами VB.NET или C# ???
Очень прошу вашей помощи.

Вот код которым я подписываю:
Dim cert As New X509Certificate2
cert.Import("C:\cert\GOST.p12", "123456", X509KeyStorageFlags.MachineKeySet)

Dim xmlDoc As New XmlDocument()
xmlDoc.Load("XMLFile1.xml")


Dim signedXml As New SignedXml(xmlDoc)
signedXml.SigningKey = cert.PrivateKey

' Create a reference to be signed.
Dim reference As New Reference()
reference.Uri = ""

Dim env As New XmlDsigEnvelopedSignatureTransform()
reference.AddTransform(env)
Dim trns As XmlDsigC14NWithCommentsTransform = New XmlDsigC14NWithCommentsTransform()
reference.AddTransform(trns)
signedXml.AddReference(reference)
signedXml.ComputeSignature()

Dim keyInfo As New KeyInfo()
keyInfo.AddClause(New KeyInfoX509Data(cert))
signedXml.KeyInfo = keyInfo

Dim xmlDigitalSignature As XmlElement = signedXml.GetXml()

xmlDigitalSignature.Prefix = "ds"
xmlDigitalSignature.ChildNodes(0).Prefix = "ds"
xmlDigitalSignature.ChildNodes(0).ChildNodes(0).Prefix = "ds"
xmlDigitalSignature.ChildNodes(0).ChildNodes(1).Prefix = "ds"
xmlDigitalSignature.ChildNodes(0).ChildNodes(2).Prefix = "ds"
xmlDigitalSignature.ChildNodes(0).ChildNodes(2).ChildNodes(0).Prefix = "ds"
xmlDigitalSignature.ChildNodes(0).ChildNodes(2).ChildNodes(0).ChildNodes(0).Prefix = "ds"
xmlDigitalSignature.ChildNodes(0).ChildNodes(2).ChildNodes(0).ChildNodes(1).Prefix = "ds"
xmlDigitalSignature.ChildNodes(0).ChildNodes(2).ChildNodes(1).Prefix = "ds"
xmlDigitalSignature.ChildNodes(0).ChildNodes(2).ChildNodes(2).Prefix = "ds"
xmlDigitalSignature.ChildNodes(1).Prefix = "ds"
xmlDigitalSignature.ChildNodes(2).Prefix = "ds"
xmlDigitalSignature.ChildNodes(2).ChildNodes(0).Prefix = "ds"
xmlDigitalSignature.ChildNodes(2).ChildNodes(0).ChildNodes(0).Prefix = "ds"


xmlDoc.DocumentElement.AppendChild(xmlDoc.ImportNode(xmlDigitalSignature, True))

xmlDoc.Save("good.xml")

Подпись XML в VB.NET IolaCOM2 4 года, 6 мес. назад #1465

  • Roman0888
  • Новый участник
  • Постов: 3
  • Репутация: 0
Вообще я пытаюсь подписать XML. нашел на форуме код, во время выходит ошибка XML parse error at position 2 (0x2): TXMLDOMDocument: element expected
вот код
:pinch: ВНИМАНИЕ: СПОЙЛЕР!

Re: Подпись XML в VB.NET IolaCOM2 4 года, 6 мес. назад #1466

  • Murat Seisenov
  • Модератор
  • Постов: 391
  • Репутация: 19
Здравствуйте!

В SDK имеется описание значений флагов IolaCOM. Рекомендую изучить их предназначение, и не ставить все флаги подряд.
Например, у Вас исходный файл в кодировке BASE64? Если нет, то зачем Вы устанавливаете флаг CF_IN_BASE64?
Модератор

Re: Подпись XML в VB.NET IolaCOM2 4 года, 6 мес. назад #1467

  • Roman0888
  • Новый участник
  • Постов: 3
  • Репутация: 0
Спасибо за ответ
Не могли бы вы дать ссылку где можно ознакомиться с SDK .
Нет, исходный файл у меня не в кодировке base64, это обычный xml фаил в utf 8, который я пытаюсь подписать

Re: Подпись XML в VB.NET IolaCOM2 4 года, 6 мес. назад #1468

  • Murat Seisenov
  • Модератор
  • Постов: 391
  • Репутация: 19
Процедура получения SDK описана на нашем сайте в разделе "разработчикам":
pki.gov.kz/index.php/ru/razrabotchikam
Модератор
  • Страница:
  • 1
FaLang translation system by Faboba