Быстрый исход: Мы публикуем приложение webstart, в которое входят наши собственные банки приложений и многочисленные сторонние банки. Webstart требует, чтобы все распределенные банки, на которые ссылается файл jnlp, подписывались одним сертификатом. Поэтому мы подписываем все банки (наши банки и сторонние банки) с использованием самозаверяющего сертификата. Некоторые сторонние банки уже подписаны стороной, которая их создала, но мы просто подписываем их снова, и это работает нормально. До сих пор.
Проблема: Недавно мы перешли с Java 6 на Java 7, и вдруг webstart отказывается загружать некоторые баночки, жалуясь: "Недопустимый дайджест файла подписи SHA1". Это происходит только для некоторых банок, а не для других, и среди тех банок, которые не работают, появляется общий поток.
После поиска по S.O. и Интернет, похоже, что алгоритм подписи по умолчанию для Java jarsigner изменился между Java 6 и Java 7, от SHA1 до SHA256, и различные люди рекомендуют использовать "jarsigner -digestalg SHA1" для решения проблем проверки. Я пробовал это, и, безусловно, наши многократные подписанные банки теперь проверяют. Таким образом, это, как представляется, является обходным путем для нашей проблемы.
Из того, что я могу собрать, похоже, что сигнатура сторонней стороны является сигнатурой SHA1, и мы подписывались с по умолчанию - SHA256, что приводило к смешению подписей. Когда я нажимаю SHA1 с помощью переключателя '-digestalg', у нас есть две подписи того же типа, и проверка теперь работает. Похоже, проблема связана с наличием нескольких подписей с разными алгоритмами? Или есть какой-то другой фактор, который мне не хватает.
Вопросы:
- Почему это не удается проверить с помощью SHA1 + SHA256, но проверяет с помощью SHA1 + SHA1? Есть ли техническая причина? Причина политики безопасности? Почему он не может проверить правильность обеих подписей?
- Есть ли у нас недостаток использования (продолжение использования) SHA1 вместо текущего SHA256 по умолчанию?