Что мешает Java проверять подписанные файлы JAR с несколькими алгоритмами подписи

Quick background:  Мы выпускаем приложение веб-запуска, которое включает в себя наши собственные jar-файлы приложений и многочисленные сторонние jar-файлы. Webstart требует, чтобы все распределенные файлы jar, на которые ссылается файл jnlp, были подписаны одним сертификатом. Поэтому мы подписываем все банки (наши банки и банки третьих сторон), используя самозаверяющий сертификат. Некоторые сторонние банки уже подписаны стороной, которая их произвела, но мы просто подписываем их снова, и это прекрасно работает. До сих пор.

Problem:  Недавно мы перешли с Java 6 на Java 7, и внезапно webstart отказывается загружать некоторые файлы jar, жалуясь: «Неверный дайджест файла подписи SHA1». Это происходит только для некоторых jar-файлов, а не для других, и среди этих jar-файлов появляется общая нить с несколькими сигнатурами.

Обыскав на С.О. и в Интернете, по-видимому, алгоритм подписи по умолчанию для jarsigner Java изменился между Java 6 и Java 7, с SHA1 на SHA256, и различные люди рекомендуют использовать «jarsigner -digestalg SHA1»; работать вокруг вопросов проверки. Я попробовал это, и, конечно же, наши банки с несколькими знаками теперь подтверждают. Так что, похоже, это обходной путь для нашей проблемы.

Из того, что я могу собрать, видно, что сторонняя подпись является подписью SHA1, и мы подписывали ее по умолчанию - SHA256 - что привело к смешению подписей. Когда я форсирую SHA1, используя «-digestalg» Переключатель, у нас есть две подписи одного типа, и проверка теперь работает. Таким образом, кажется, что проблема вызвана наличием нескольких подписей с разными алгоритмами? Или есть какой-то другой фактор, который мне не хватает.

Questions:

Why does it fail to verify with SHA1 + SHA256, but verifies with SHA1 + SHA1? Is there a technical reason? A security policy reason? Why can't it verify that both signatures are correct? Is there any drawback to us using (continuing to use) SHA1 instead of the now-default SHA256?

Ответы на вопрос(3)

Ваш ответ на вопрос