Мой XML цифровая подпись имеет следующие выдержки:XML Digital Signature: как вычисляется значение дайджеста для URI одинакового документа?
<Signature Id="idPackageSignature" xmlns="http://www.w3.org/2000/09/xmldsig#">
<SignedInfo>
<CanonicalizationMethod Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315"/>
<SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1"/>
<Reference URI="#idOfficeObject" Type="http://www.w3.org/2000/09/xmldsig#Object">
<DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/>
<DigestValue>ofqf9+Tj0qTkkExCEOwFz0V4aNo=</DigestValue>
</Reference>
</SignedInfo>
<Object Id="idOfficeObject"><SignatureProperties><SignatureProperty Id="idOfficeV1Details" Target="#idPackageSignature"><SignatureInfoV1 xmlns="http://schemas.microsoft.com/office/2006/digsig"><SetupID/><SignatureText/><SignatureImage/><SignatureComments>test</SignatureComments><WindowsVersion>6.1</WindowsVersion><OfficeVersion>14.0</OfficeVersion><ApplicationVersion>14.0</ApplicationVersion><Monitors>1</Monitors><HorizontalResolution>1920</HorizontalResolution><VerticalResolution>1200</VerticalResolution><ColorDepth>32</ColorDepth><SignatureProviderId>{00000000-0000-0000-0000-000000000000}</SignatureProviderId><SignatureProviderUrl/><SignatureProviderDetails>9</SignatureProviderDetails><ManifestHashAlgorithm>http://www.w3.org/2000/09/xmldsig#sha1</ManifestHashAlgorithm><SignatureType>1</SignatureType></SignatureInfoV1></SignatureProperty></SignatureProperties></Object>
по ссылке элемент Объект должен иметь значение дайджеста ofqf9 + Tj0qTkkExCEOwFz0V4aNo =. Я канонизировать элемент объекта, и получить следующий вывод, что кажется правильным для меня:
<Object Id="idOfficeObject"><SignatureProperties><SignatureProperty Id="idOfficeV1Details" Target="#idPackageSignature"><SignatureInfoV1 xmlns="http://schemas.microsoft.com/office/2006/digsig"><SetupID></SetupID><SignatureText></SignatureText><SignatureImage></SignatureImage><SignatureComments>test</SignatureComments><WindowsVersion>6.1</WindowsVersion><OfficeVersion>14.0</OfficeVersion><ApplicationVersion>14.0</ApplicationVersion><Monitors>1</Monitors><HorizontalResolution>1920</HorizontalResolution><VerticalResolution>1200</VerticalResolution><ColorDepth>32</ColorDepth><SignatureProviderId>{00000000-0000-0000-0000-000000000000}</SignatureProviderId><SignatureProviderUrl></SignatureProviderUrl><SignatureProviderDetails>9</SignatureProviderDetails><ManifestHashAlgorithm>http://www.w3.org/2000/09/xmldsig#sha1</ManifestHashAlgorithm><SignatureType>1</SignatureType></SignatureInfoV1></SignatureProperty></SignatureProperties></Object>
хранить его в файле «inputxml», и попытаться получить в формате base64 версию sha1 переваривать, используя следующие команда:
% shasum inputxml | cut -f 1 -d ' ' | xxd -r -p | base64
/zTi8HGHX9X+csjULYLt6FLrm3g=
Вычисленное значение дайджест не соответствует тому, что находится в подписи XML. Что я делаю не так? Я пробовал несколько различных методов и настроек, но не могу получить правильное значение дайджест.
Примечание: Подпись XML проверяет правильность. Значит, это правильно, но я пропускаю какой-то шаг или деталь. Спасибо за вашу помощь. Пожалуйста, дайте мне знать, как я могу уточнить или уточнить мой вопрос дальше, если это не совсем понятно.
Полная подпись поможет. Однако в вашем вычислении отсутствует хотя бы один шаг: канонизация. Если в ссылке не указано преобразование/канонизация, вы должны сделать по умолчанию (см. Спецификацию xmldsig). По умолчанию было бы добавлено объявление пространства имен в элемент «Объект». Это даст: «<Идентификатор объекта =« idOfficeObject »xmlns =« http://www.w3.org/2000/09/xmldsig# »....» – Moez
@Moez * по крайней мере один шаг отсутствует в ваших вычислениях : canonicalization. * - Возможно, вы упустили из виду, что OP написал ** Я canonicalize элемент Object, и получить следующий вывод, который кажется мне правильным ** ... – mkl
@mkl Да, я пропустил это. Однако выход канонизационной обработки неверен. Объявление пространства имен отсутствует. – Moez