Различная подпись XML между Apache Santuario и API цифровой подписи XML Java - PullRequest
0 голосов
/ 26 октября 2018

Я сделал две реализации, которые должны делать то же самое: подписать файл XML с данным сертификатом X509.

  • Первый, который я сделал с нативным API цифровой подписи XML Java (из javax.xml.crypto.dsi).
  • Второй вариант, который я реализовал в Kotlin (моя цель - запустить его в Android), используя Apache Santuario XML Security версии 2.0.3.

Произошло то, что для того же XML-файла, который должен быть подписан, он генерирует разные значения для SignatureValue. Но все остальные свойства XML точно такие же:

  • DigestValue одинаковы, что свидетельствует о том, что файлы идентичны.
  • KeyInfo / X509Data / X509Certificate равны, поэтому сертификат точно такой же.
  • Алгоритмы CanonicalizationMethod, SignatureMethod, DigestMethod и Transform абсолютно одинаковы.

Я пытался даже для небольшого XML (например, только тег ), но SignatureValue никогда не совпадает.

Есть ли случаи совпадения всех данных из тега , кроме SignatureValue?

1 Ответ

0 голосов
/ 05 ноября 2018

Я нашел решение.Это произошло потому, что Apache Santuario добавляет разрыв строки в теге подписи.Так что тег имеет разное содержимое, если сравнивать тег, сгенерированный Apache, и тег, сгенерированный из подписи Java XML.

Чтобы исправить это, я поставил следующую строку кода перед подписанием.

System.setProperty("org.apache.xml.security.ignoreLineBreaks", "true")
...