Тема: Взаимодействие со СМЭВ
Добрый день!
Поставлена задача организовать взаимодействие со СМЭВ с использованием криптосредств Валидата. Необходимо подписывать отправляемые сообщения (xml-данные) по следующему алгоритму:
3.1 Открытый ключ подписи, закодированный по алгоритму «http://www.w3.org/2000/09/xmldsig#base64», добавляется к элементу X509Certificate как дочерний текстовый узел.
3.2 Подписываются элементы документа, выбранные посредством XPATH выражения на основе значения атрибута URI элемента Reference (если элемент URI имеет пустое значение, то подписывается полностью весь тег сущности). Полученное значение кодируется по алгоритму «http://www.w3.org/2000/09/xmldsig#base64» и добавляется как дочерний текстовый узел к элементу DigestValue первого элемента Reference.
3.3 Элемент SignedInfo трансформируется в соответствии с алгоритмом «http://www.w3.org/2001/10/xml-exc-c14n#». Затем на основании полученной строки и ключа подписи формируется значение ЭП в соответствии с алгоритмом «http://www.w3.org/2001/04/xmldsig-more#gostr34102001-gostr3411». Полученное значение ЭП кодируется в соответствии с алгоритмом «http://www.w3.org/2000/09/xmldsig#base64», и значение добавляется как дочерний текстовый узел к элементу SignatureValue.
Ниже приведен пример готового xml с подписью:
<?xml version="1.0" encoding="UTF-8"?>
<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/" xmlns:rev="http://smev.gosuslugi.ru/rev120315" xmlns:smev="http://roskazna.ru/gisgmp/02000000/SmevGISGMPService/" xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
<S:Header>
<wsse:Security S:actor="http://smev.gosuslugi.ru/actors/smev">
<ds:Signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
<SignedInfo xmlns="http://www.w3.org/2000/09/xmldsig#">
<CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" />
<SignatureMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#gostr34102001-gostr3411" />
<Reference URI="#body">
<Transforms>
<Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" />
</Transforms>
<DigestMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#gostr3411" />
<DigestValue>R/HhBTokGjCkEt10hwBwpBeEtU71mXa9WzU8yF1FtsA=</DigestValue>
</Reference>
</SignedInfo>
<SignatureValue xmlns="http://www.w3.org/2000/09/xmldsig#">ppjO9ScclKcGrMMxUFx5u1sSRXUmN/zpQTa7INhHbDntfp4sBHSPuP8bPyKyXF0U43m+CCJDiL2W4RyolxUqhQ==</SignatureValue>
<ds:KeyInfo>
<wsse:SecurityTokenReference>
<wsse:Reference URI="#SenderCertificate" />
</wsse:SecurityTokenReference>
</ds:KeyInfo>
</ds:Signature>
<wsse:BinarySecurityToken EncodingType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#Base64Binary" ValueType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-x509-token-profile-1.0#X509v3" wsu:Id="SenderCertificate">MIIC/zCCAq6gAwIBAgITEgACzs+JbKisyovIVAAAAALOzzAIBgYqhQMCAgMwfzEjMCEGCSqGSIb3DQEJARYUc3VwcG9ydEBjcnlwdG9wcm8ucnUxCzAJBgNVBAYTAlJVMQ8wDQYDVQQHEwZNb3Njb3cxFzAVBgNVBAoTDkNSWVBUTy1QUk8gTExDMSEwHwYDVQQDExhDUllQVE8tUFJPIFRlc3QgQ2VudGVyIDIwHhcNMTUwMzE3MTMwNzUwWhcNMTUwNjE3MTMxNzUwWjAOMQwwCgYDVQQDDANsdHQwYzAcBgYqhQMCAhMwEgYHKoUDAgIkAAYHKoUDAgIeAQNDAARAZ7M/gIf4eBP2zopA9imuhHpxUteEw6E/nFiR4HZl/mgmLccDfnEkALUyrfoFK1jqwAss3KXqw179b2NXb34Kb6OCAXAwggFsMA4GA1UdDwEB/wQEAwIE8DATBgNVHSUEDDAKBggrBgEFBQcDAjAdBgNVHQ4EFgQUFZkbfqXAVa7DrADxgsEbd5fP0AIwHwYDVR0jBBgwFoAUFTF8sI0a3mbXFZxJUpcXJLkBeoMwWQYDVR0fBFIwUDBOoEygSoZIaHR0cDovL3Rlc3RjYS5jcnlwdG9wcm8ucnUvQ2VydEVucm9sbC9DUllQVE8tUFJPJTIwVGVzdCUyMENlbnRlciUyMDIuY3JsMIGpBggrBgEFBQcBAQSBnDCBmTBhBggrBgEFBQcwAoZVaHR0cDovL3Rlc3RjYS5jcnlwdG9wcm8ucnUvQ2VydEVucm9sbC90ZXN0LWNhLTIwMTRfQ1JZUFRPLVBSTyUyMFRlc3QlMjBDZW50ZXIlMjAyLmNydDA0BggrBgEFBQcwAYYoaHR0cDovL3Rlc3RjYS5jcnlwdG9wcm8ucnUvb2NzcC9vY3NwLnNyZjAIBgYqhQMCAgMDQQBaRu5Ed1u/TIZcuHphLCy7dpHViqPDRI+X6axCtCjcnKwKlBLVMuiDQgQjb8hQcHLAG0CvSgO1QwtkUHxHwrq/</wsse:BinarySecurityToken>
</wsse:Security>
</S:Header>
<S:Body wsu:Id="body">
<smev:GISGMPTransferMsg>
<rev:Message>
<rev:Sender>
<rev:Code>AN0010001</rev:Code>
<rev:Name>ИС АН 1</rev:Name>
</rev:Sender>
<rev:Recipient>
<rev:Code>RKZN35001</rev:Code>
<rev:Name>Казначейство России</rev:Name>
</rev:Recipient>
<rev:ServiceName>GISGMP</rev:ServiceName>
<rev:TypeCode>GFNC</rev:TypeCode>
<rev:Status>REQUEST</rev:Status>
<rev:Date>2014-11-12T09:30:47.0Z</rev:Date>
<rev:ExchangeType>6</rev:ExchangeType>
</rev:Message>
<rev:MessageData>
<rev:AppData>
<gisgmp:RequestMessage xmlns:gisgmp="http://roskazna.ru/gisgmp/xsd/116/Message" xmlns:com="http://roskazna.ru/gisgmp/xsd/116/Common" xmlns:ds="http://www.w3.org/2000/09/xmldsig#" xmlns:msgd="http://roskazna.ru/gisgmp/xsd/116/MessageData" xmlns:n1="http://www.altova.com/samplexml/other-namespace" xmlns:pdr="http://roskazna.ru/gisgmp/xsd/116/PGU_DataRequest" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" Id="ID_1" callBackURL="http://www.altova.com" senderIdentifier="000147" timestamp="2014-11-12T09:30:47.0Z" xsi:schemaLocation="http://roskazna.ru/gisgmp/xsd/116/Message Message.xsd">
<msgd:ExportRequest Id="ID_2" kind="CHARGE">
<pdr:Filter>
<pdr:Conditions>
<pdr:ChargesIdentifiers>
<pdr:SupplierBillID>0000016101005733332038899</pdr:SupplierBillID>
</pdr:ChargesIdentifiers>
</pdr:Conditions>
</pdr:Filter>
</msgd:ExportRequest>
</gisgmp:RequestMessage>
</rev:AppData>
</rev:MessageData>
</smev:GISGMPTransferMsg>
</S:Body>
</S:Envelope>
Вопрос в том, имеются ли в Валидата SDK под .Net (C#, используется cvpia2.dll) методы, необходимые для реализации приведенного алгоритма подписи (если возможно, какие конкретно)? Может, есть какой-то пример подписи xml-данных?