Я пользуюсь Salesforce, и мне нужно подписать XML.Проблема в том, что я не могу использовать собственный метод подписи Salesforce, потому что мне нужно поместить подпись в элемент заголовка soap: а это невозможно.В Salesforce также отсутствует собственный метод канонизации.Так что я «вручную» создаю дайджест, вручную изменяя XML в его канонизированную форму, и это прекрасно работает.Затем я помещаю его в блок SignedInfo и пытаюсь запустить метод signwithcertificate для этого блока.Я использую RSA-SHA1, и я получаю результат, но это не то, что я ожидаю.Мне любопытно, что у меня возникла проблема с канонизацией этого блока SignedInfo.
У меня есть этот блок:
<SignedInfo>
<CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
<SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1"/>
<Reference URI="#Body">
<Transforms>
<Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
</Transforms>
<DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/>
<DigestValue>AMyUbs9zGUGJ52sFMalRNFFbI5o=</DigestValue>
</Reference>
</SignedInfo>
, который я могу канонизировать следующим образом:
<SignedInfo><CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"></CanonicalizationMethod><SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1"></SignatureMethod><Reference URI="#Body"><Transforms><Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"></Transform></Transforms><DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"></DigestMethod><DigestValue>AMyUbs9zGUGJ52sFMalRNFFbI5o=</DigestValue></Reference></SignedInfo>
Тогда я подпишу эти данные с помощью RSA-SHA1, используя мой ключ.
Что-то не так в моем мышлении?