2013-08-16 10 views
5

Od kilku dni walczę z tym w głowę i jestem kompletnie zakłopotany. Oto wybiegiem:jarsigner -verify działa w Javie 6, ale nie w Javie 7

  1. Mam projektu plugin Eclipse przy użyciu Tycho budować poprzez Maven 3
  2. ciągu Maven Mam maven-jarsigner-plugin skonfigurować do podpisania słoików używając mojego kluczy (patrz szczegóły poniżej kluczy)
  3. mam podpisywanie kodu cert, który został podpisany przez Thawte w moim kluczy

mogę podejmować żadnych podpisany plik jar z docelowej/* i uruchom „jarsigner -verify” na nim . To, co się dzieje:

#java 6 on a VM 
[email protected]:/vagrant/com.example.plugins.eclipse/target$ jarsigner -verify com.example.eclipse-0.1.3-SNAPSHOT.jar 
jar verified. 

Następny:

#java 7 on a completely different vm 
[email protected]:/vagrant$ jarsigner -verify com.example.eclipse-0.1.3-SNAPSHOT.jar 
jar verified. 

Warning: 
This jar contains entries whose certificate chain is not validated. 

Re-run with the -verbose and -certs options for more details. 

mam uważać, aby nie używać maszyny z zainstalowanym zarówno java6 i Java7, więc nie jest to this issue

ja również don” t wierzę, że jest oparty na algorytmie, jak to opisano w this issue, ponieważ mogę podpisać projekt przy użyciu Javy 6 lub Java 7 i zawsze zawsze sprawdza w Javie6 i weryfikuje w języku Java6 i nigdy sprawdza w Javie7, niezależnie od tego, z jakim środowiskiem podpisałem słoiki.

Oto wyjście keytool -list

Keystore type: JKS 
Keystore provider: SUN 

Your keystore contains 3 entries 

root, Aug 11, 2013, trustedCertEntry, 
Certificate fingerprint (SHA1): 91:C6:D6:EE:3E:8A:C8:63:84:E5:48:C2:99:29:5C:75:6C:81:7B:81 
intermediate, Aug 11, 2013, trustedCertEntry, 

Muszę wierzyć, że jest to kwestia Łańcuch certyfikatów, bo jestem w stanie zweryfikować słoik za pomocą następującego polecenia w języku Java 7:

jarsigner -verify -keystore keystore com.example.eclipse-0.1.3-SNAPSHOT.jar 

Oczywiście nie mogę mieć każdego użytkownika mojej wtyczki za pomocą mojego pliku magazynu kluczy, więc to nie jest rozwiązanie. Jednak wzmacnia to, że mam problem z łańcuchem certyfikatów w języku Java 7. Myśli?

+0

Czy można ponownie uruchomić przy użyciu opcji -verbose i -certs i opublikować dane wyjściowe? – sErVerdevIL

Odpowiedz

3

Kilka miesięcy później zdarzyło mi się znaleźć odpowiedź na moje własne pytanie. Dla nikogo innego z tej samej kwestii, oto co zrobiłem:

  1. konwertować istniejący klucz prywatny i CA podpisał cert w formacie PKCS12 (jest to wymagane, ponieważ keytool Java nie pozwala na bezpośredni import te przedmioty). Można tego dokonać w jednym poleceniem openssl:

    openssl pkcs12 -export -name signing -in signing.cert -inkey myPrivateKey.key -out keystore.p12 
    

    Gdzie podpisanie jest nazwa mojego pkcs12 kluczy, signing.cert jest moim CA dostarczana podpisał cert, i (oczywiście) myPrivateKey.key jest mój klucz prywatny, który był służy do podpisania żądania certyfikatu.

  2. importu to nowo utworzone kluczy do magazynu kluczy Java:

    keytool -importkeystore -destkeystore keystore -srckeystore keystore.p12 -srcstoretype pkcs12 -alias signing 
    
  3. Importuj cert Java CA do kluczy. Nie jestem do końca pewien, jaka to robi magia, ale bez niej łańcuch certyfikatów nie jest przestrzegany (nawet przy ręcznym dodawaniu certyfikatów pośrednich). Ten certyfikat jest zwykle dostarczany za pośrednictwem wiadomości e-mail, do której dotarł twój certyfikat podpisu. Dla naszych celów nazywa się on signing.pkcs7.

    keytool -importcert -file signing.pkcs7 -keystore keystore -v -alias signing 
    

    Będziesz musiał wprowadzić hasło magazynu kluczy używane podczas tworzenia magazynu kluczy Java.

  4. Użyj wtyczki maven-jarsigner (lub jakiejkolwiek innej automatyzacji), aby podpisywać projekty podczas kompilacji.

4

To działa. Otrzymasz "jar zweryfikowane" w obu przypadkach => JAR jest weryfikowany w obu przypadkach. Oznacza to, że JAR został podpisany przez tego, kogo twierdzi, że jest podpisany, i że JAR nie został później naruszony.

Java 7 drukuje ostrzeżenie .

+1

Nie uważam, że działa, gdy łańcuch certyfikatów nie może zostać zatwierdzony. –

+0

'jarsigner -verify' działa dla mnie, bez tej wiadomości. Twój łańcuch certyfikatów może nie działać dla ciebie, osobny problem. – EJP

+1

Łańcuch certyfikatów nie jest osobnym problemem, jest to * problem *. Narzędzie Jarsigner zasysa dobrą ścieżkę informacyjną i szukam sugestii podczas debugowania. –

8

Odpowiedź na twój problem polega na tym, że korzystasz z SUN, ponieważ Twój dostawca magazynów kluczy Java 6 został wydany przed zakupem SUN przez Oracle, a java 7 została wydana po tym, jak wiele pakietów Sun jest już przestarzałych. Możesz zweryfikować to here.

Firma Oracle nadal zapewnia obsługę przestarzałego dostawcy magazynów kluczy SUN, ale teraz wymaga ostrzeżenia takiego samego, jak w przypadku użycia jakiejkolwiek nieaktualnej funkcji.

Istnieje długi, szczegółowy opis napisany przez firmę Oracle na temat tego, dlaczego nie powinieneś używać dostawcy SUN do podpisywania zabezpieczeń w swojej witrynie internetowej pod numerem JCA Documentation.

Jedyną rzeczą, która "naprawi" to, jest zmiana dostawcy kluczy i zaakceptowana przez użytkownika, możesz znaleźć je w tej samej dokumentacji związanej z bezpieczeństwem.

Nadzieję, że pomaga.

Powiązane problemy