Библиотека поставщика криптографии 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 ());
помог мне избавиться от исключений.