Подтвердить что ты не робот

Библиотека провайдеров криптографии BouncyCastle, используемая с апплетом на Java 7u40

Случай. Я поддерживаю Java-апплет, который использует библиотеки BouncyCastle bcpkix-jdk15on-149.jar и bcprov-jdk15on-149.jar.

Проблема в том, что апплет запускается в браузере с поддержкой JRE версии 7_u40.
Поведение изменилось с версии 7_u25 таким образом, что оно всегда запрашивает модальное окно, например "Запрос безопасности для приложения, использующего самозаверяющий сертификат" (который больше не может быть скрыт), чтобы доверять bcprov.

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

Насколько я знаю, это связано с тем, что библиотеки BC подписываются с сертификатом BouncyCastle, выданным "CA JCE Code Signing CA". Из-за этого lib может выполнять и действовать как поставщик криптографии.

НО: JRE не может построить цепочку сертификатов, чтобы доверять сигнатуре. Он показывает "поставщик: UNKNOWN"

Я знаю, что могу удалить эту подпись и подписать сам (у меня есть сертификат знака кода Thawte):

  • он работает с bcpkix lib
  • он не работает с bcprov, потому что он не будет считаться допустимым поставщиком криптографии (ему не будет доверять JRE).

Я прав? Что я могу сделать?
PS: Я много искал, чтобы найти корневой сертификат JCA (чтобы поместить его в доверительный магазин JRE), без успеха... Есть ли способ захватить этот корневой ЦС?

4b9b3361

Ответ 1

После многих поисков и некоторых сообщений в списке рассылки BC.... Я нашел решение, поэтому я бросаю его сюда для других, кто может столкнуться с этой проблемой:

Решение состоит в том, чтобы в основном подписывать библиотеку BC второй раз с моим собственным сертификатом.
JAR нуждается в сигнатуре JCA, чтобы доверять как поставщик криптографии, поэтому не удаляйте ее.
JAR также требует (кроме того) кодовой подписи, чтобы иметь возможность запускаться в JVM (доверенный JRE).

Последнее, что некоторая несовместимость произошла в технологии подписи:

  • BC lib подписывается с использованием SHA1 digest algorythm
  • jarsigner (на моем компьютере) по умолчанию делает подпись с SHA256 digest algorythm, что приводит к ошибке проверки.
  • Поэтому мне пришлось попросить jarsigner сделать это способом SHA1. (по какой-то причине обе подписи должны быть согласованы с этой точки зрения)

Вот волшебный параметр команды jarsigner, чтобы добавить и сделать это: -digestalg SHA1

Пример команды:

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

... и все готово!

Следующий пост дал мне совет: Что мешает Java проверять подписанные банки с несколькими алгоритмами подписи

Ответ 2

Мы также можем включить другую запись stackoverflow и ответ, который помог мне:

Ввод строки: Security.addProvider(новый org.bouncycastle.jce.provider.BouncyCastleProvider());

Помог мне избавиться от исключения.

Источник: jce не может аутентифицировать поставщика bc