2013-09-26 12 views
18

postępowania: Jestem utrzymanie apletu Java, który używa biblioteki BouncyCastle bcpkix-jdk15on-149.jar i bcprov-jdk15on-149.jar.BouncyCastle Cryptography biblioteka dostawca stosowany z apletu Java 7u40 na

Problem występuje, gdy aplet uruchamiany jest w przeglądarce obsługującej środowisko JRE w wersji 7_u40.
Zachowanie zmieniło się z wersji 7_u25 w taki sposób, że zawsze wyświetla okno modalne, takie jak "Monit o bezpieczeństwo dla aplikacji używającej samopodpisanego certyfikatu" (którego nie można już trwale ukryć), aby zaufać bcprov.

https://www.java.com/en/download/help/appsecuritydialogs.xml

O ile mi wiadomo, to dlatego, że biblioteki BC są podpisane certyfikatem BouncyCastle, wydany przez „Kodeksu JCE Podpisanie CA”. Z tego powodu biblioteka może wykonywać i działać jako dostawca kryptografii.

ALE: JRE nie może zbudować łańcucha certyfikatów, aby zaufać podpisowi. To pokazuje, „dostawca: NIEZNANY”

wiem mogę usunąć ten podpis i podpisania przez siebie (posiadam certyfikat kod migowy Thawte):

  • współpracuje z bcpkix lib
  • to nie działa z bcprov, ponieważ nie będzie on uważany za prawidłowego dostawcę kryptografii (nie będzie ufał JRE).

Mam rację? Co mogę zrobić?
PS: Dużo googlowałem, aby znaleźć certyfikat główny JCA (aby umieścić go w zaufanym magazynie JRE), bez powodzenia ... Czy istnieje sposób na pobranie tego głównego urzędu certyfikacji?

+0

Niektórzy ludzie kazali mi podpisać bibliotekę bcprov (już podpisany przez BC) po raz drugi z własnym certyfikatem. Problem polega na tym, że wynik kończy się niepowodzeniem w przypadku weryfikacji za pomocą "jarsignera". Tak więc, jeśli ktoś wie, jak umieścić kolejny podpis na pliku JAR, proszę dać mi znać –

Odpowiedz

21

Po wielu poszukiwania i pewnego postu w liście dyskusyjnej BC .... znalazłem rozwiązanie, więc wpadnę go tutaj dla innych, którzy mogą napotkać ten problem:

Rozwiązanie jest w zasadzie do podpisania BC biblioteka po raz drugi z własnym certyfikatem.
JAR potrzebuje podpisu JCA, aby być zaufanym dostawcą usług kryptograficznych, więc nie należy go usuwać.
JAR wymaga również (dodatkowo) podpisu kodu, aby można było go uruchomić w JVM (zaufany przez JRE).

Ostatnią rzeczą, niektóre niekompatybilność się na technologii Podpis:

  • BC lib jest podpisany przy użyciu SHA1 algorytm
  • jarsigner (na moim komputerze) robi podpis z SHA256 digest algorytm domyślnie co prowadzi do niepowodzenia weryfikacji.
  • Więc musiałem poprosić jarsignera, aby zrobił to w sposób SHA1.(Z jakiegoś powodu oba podpisy muszą być zgodne z tego punktu widzenia)

Oto magiczny parametr polecenia jarsigner dodać i tak się stało: -digestalg SHA1 polecenie

Próbka:

jarsigner -keystore ./mykeystore.jks -storepass myPass -digestalg SHA1 bcprov-jdk15on-149.jar myAlias 

... i gotowe!

Poniższy post dał mi wskazówka: What prevents Java from verifying signed jars with multiple signature algorithms

+2

jesteś bogiem wśród mężczyzn –

+0

mój aplet to jeden plik jar, który zawiera klasy z wszystkich innych słoików, w tym bounty castle, otrzymuję ten wyjątek. autor: java.io.IOException: błąd konstruowania MAC: java.lang.SecurityException: JCE nie może uwierzytelnić dostawcy BC , proszę radzić jak używać jarsignera, gdy klasy Bc znajdują się po stronie mojego apletu? – user884424

+1

Tylko komentarz, na moim systemie (Ubuntu 14.04 64 bity, OpenJDK 7) z bcprov-jdk15on v1.56, musiałem podpisać to z -digestalg SHA-256 dla weryfikacji, aby odnieść sukces. – ixM

0

Możemy również zawierać inne stanowisko stackoverflow i odpowiedzi, które pomogły mi:

Umieszczenie linii: Security.addProvider (nowa org.bouncycastle. jce.provider.BouncyCastleProvider());

Pomógł mi pozbyć się wyjątku.

Źródło: jce cannot authenticate the provider bc