Павел Анфимов пишет:vanobl, добрый день!
OpenSSL не умеет формировать подпись в формате XAdES.
Предлагаем вам воспользоваться примером из Рутокен SDK.
Внутри архива, он находится по пути: sdk\openssl\samples\Common\XMLDSigDetached
Хочу уточнить, что в файле file.xml (который указан в примере) находится не исходный XML, который нужно подписать. А часть блока <ds:Signature>, а именно:
<ds:SignedInfo>
<ds:CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"></ds:CanonicalizationMethod>
<ds:SignatureMethod Algorithm="urn:ietf:params:xml:ns:cpxmlsec:algorithms:gostr34102012-gostr34112012-256"></ds:SignatureMethod>
<ds:Reference Id="xmldsig-07471c2e-e12b-4351-97c8-c42dfdfc840f-ref0" URI="#531d4574-34e3-49f5-b0fb-4a6ffdc94ada">
<ds:Transforms>
<ds:Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature"></ds:Transform>
<ds:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"></ds:Transform>
</ds:Transforms>
<ds:DigestMethod Algorithm="urn:ietf:params:xml:ns:cpxmlsec:algorithms:gostr34112012-256"></ds:DigestMethod>
<ds:DigestValue>YmU1Y2RmMTA4NDBmNzRlYjkzYTk4N2Q1ZjUyMTM5OTIzZDkyNWVlYmE2NjgxZTUyMTMzZmE1ZjgzYTYyNzEwNw==</ds:DigestValue>
</ds:Reference>
<ds:Reference URI="#xmldsig-07471c2e-e12b-4351-97c8-c42dfdfc840f-signedprops" Type="http://uri.etsi.org/01903#SignedProperties">
<ds:Transforms>
<ds:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"></ds:Transform>
</ds:Transforms>
<ds:DigestMethod Algorithm="urn:ietf:params:xml:ns:cpxmlsec:algorithms:gostr34112012-256"></ds:DigestMethod>
<ds:DigestValue>MzM5Yzc3MjY4NTllNzdjNjRiY2JiNGU5ZWIwMjdjMTIxYWIyYjY3NzBlYzI2NDgzZDdjNWIxYWNmZTgxNDg4YQ==</ds:DigestValue>
</ds:Reference>
</ds:SignedInfo>
И от этого блока нужно получить подпись. Т.е. саму структуру подписи для XML файла не нужно формировать, нужно заполнить определённые поля. И один из них это <ds:SignatureValue>
Возможно я не правильно понимаю алгоритм подписания XML. Буду рад, если поправите меня.