Szybkie tło: Wydajemy aplikację internetową, która obejmuje nasze własne słoiki aplikacji i liczne słoiki innych firm. Webstart wymaga, aby wszystkie rozproszone słoiki, do których odnosi się plik jnlp, były podpisane przez pojedynczy certyfikat. Dlatego podpisujemy wszystkie słoiki (nasze słoiki i słoiki firm trzecich) za pomocą samopodpisanego certyfikatu. Niektóre słoiki innych firm są już podpisane przez stronę, która je wyprodukowała, ale po prostu podpisujemy je ponownie i działa to dobrze. Do teraz.Co uniemożliwia Java weryfikowanie podpisanych słoików z wieloma algorytmami podpisów.
Problem: Niedawno przeniósł się z Java 6 Java 7 i nagle webstart odmawia załadować kilka słoików, twierdząc: "Nieprawidłowy plik SHA1 podpis Digest". Dzieje się tak tylko w przypadku niektórych słoików, a nie w innych, a wspólny wątek pojawia się wśród tych słoików, które zawierują się, wydaje się, że mają wiele sygnatur.
Po wyszukiwaniu w witrynie S.O. oraz Internet, wydaje się, że domyślny algorytm podpisu dla jarsignera Javy zmienił się między Java 6 i Java 7, z SHA1 na SHA256, a różne osoby zalecają użycie "jarsigner -digestalg SHA1", aby obejść problemy z weryfikacją. Wypróbowałem to i na pewno nasze słoje z wieloma znakami teraz sprawdzają. Wygląda to na obejście naszego problemu.
Z tego, co mogę zebrać, wynika, że podpis strony trzeciej jest sygnaturą SHA1, a my podpisywaliśmy domyślnie - SHA256 - co skutkowało miksowaniem podpisów. Kiedy wymuszam SHA1 przy użyciu przełącznika "-digestalg", mamy dwa sygnatury tego samego typu, a weryfikacja działa. Więc wydaje się, że problem jest spowodowany posiadaniem wielu sygnatur z różnymi algorytmami? Czy jest jakiś inny czynnik, którego mi brakuje?
Pytania:
- Dlaczego nie sprawdzić z SHA1 + SHA256, ale sprawdza się SHA1 + SHA1? Czy jest jakiś techniczny powód? Przyczyna polityki bezpieczeństwa? Dlaczego nie można sprawdzić, czy oba podpisy są poprawne?
- Czy jest jakaś wada przy użyciu (kontynuowaniu używania) SHA1 zamiast domyślnego SHA256?
I zauważył, że nawet chociaż SHA1 + SHA256 nie przy użyciu różnych kluczy ... jeśli podpisał JAR przy użyciu SHA1 + SHA256 z tym samym kluczem, nigdy weryfikacja zakończy się niepowodzeniem. –