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

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

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

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

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

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

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

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

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

2 ответов


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

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

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

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

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

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

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

... и вы закончили!

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


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

установка линии: Безопасность.addProvider (новая организация.после установки BouncyCastle.око.поставщик.BouncyCastleProvider ());

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

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