JNLP + Апплет + Надувной Замок - PullRequest
1 голос
/ 25 ноября 2010

У меня есть развернутый апплет JWS (Java Web Start), который использует следующие библиотеки / jars:

red5.jar spring-beans.jar spring-context.jar spring-core.jar apache-mina.jar

bcprov-ext-jdk16-145 (Надувной замок)

Причина, по которой я поместил все эти библиотеки в апплет, заключается в том, что red5.jar требует, чтобы у вас были и другие.Однако BouncyCastle почему-то не загружается ClassLoader и не подписывается Netbeans во время компиляции проекта WebStart.Какие-нибудь указатели, как я могу решить это?

Вот что я получу, если включу Bouncy Castle в свой архив:

basic: exception: JAR resources in JNLP file are not signed by same certificate.
exception: JAR resources in JNLP file are not signed by same certificate.
JNLPException[category: Launch File Error : Exception: null : LaunchDesc

И вот что я получаю, даже когда НЕ ВКЛЮЧАЮТ ЕГОВ ПРОЕКТЕ:

com.sun.deploy.net.FailedDownloadException: Unable to load resource: file:/C:/JNA/dist/lib/bcprov-ext-jdk16-145.jar

Я не знаю, какая из банок требует банку Bouncy Castle, поскольку в моей IDE это не указано.Кроме того, даже если я включу Bouncy Castle.jar в свой проект, Netbeans ДОЛЖЕН подписать его по умолчанию, но это не так, хотя он подписывает ВСЕ другие jar-файлы в моем проекте Web Start.Однако быстрая проверка с помощью jarsigner показывает, что все банки, включая Bouncy Castle, подписаны, поэтому я могу с уверенностью предположить, что все они подписаны, за исключением того, что Bouncy Castle подписан с другим сертификатом.

И вот мой вопрос: должен ли я попытаться подписать все файлы вручную (чтобы они все имели одинаковый сертификат) или проблема в другом месте (например, BouncyCastle не может быть подписан в апплете, или что-то в этом роде?)?

Любые указатели будут высоко оценены

РЕДАКТИРОВАТЬ:

У меня в основном ДВУХ подходов, оба до сих пор не удалось:

Подход 1. Извлечьдерево каталогов каждого jar-файла и выгрузите их вместе в общий каталог, а затем создайте jar-файл этого каталога, чтобы все файлы в нем были подписаны одним и тем же сертификатом (один jar-файл, один сертификат, верно ...). Однако Spring STILL ожидаетфайлы должны быть организованы следующим образом: dist \ libs \ bcProv.jar вместо dist \ libs \ allLibs.jar, где все библиотеки выгружаются в файл allLibs.jar.Подход с треском проваливается, потому что Spring не может найти ни одну из библиотек при развертывании через JWS.

Подход 2. Подпишите все jar-файлы вручную с помощью ТОГО ЖЕ сертификата.Потратив 10 минут на ручную подпись jar-файлов, этот подход также дает сбой, и он имеет смелость выдать ошибку, что bcProv.jar НЕ подписан тем же сертификатом, что и остальные.

Я озадачен, сбит с толку и смущен.Есть идеи?Можно ли вообще иметь вместе в JWS-апплете такие jar-файлы:

red5.jar

spring-beans.jar

spring-context.jar

spring-core.jar

apache-mina.jar

bcprov-ext-jdk16-145

Ответы [ 3 ]

4 голосов
/ 26 ноября 2010

Хорошо, вот ответ:

Прежде всего, как предположил Bloodboiler, у вас проблемы, если ваш апплет использует баночки, подписанные разными сертификатами. Таким образом, ваше решение должно заключаться в том, чтобы подписать их всех одним и тем же сертификатом.

У вас есть несколько возможностей здесь:

one - извлечь все банки вашего проекта, а затем объединить их в один сосуд и подписать его. По некоторым причинам это не работает с Spring-context и BouncyCastle. Я уверен, что если бы у меня хватило смелости возиться с этим, это сработало бы.

другой способ, как предположил М.Джоанис, использовать FatJar, но он также по какой-то причине не работал. Что касается метода, описанного выше, у меня не было желания или желания тратить на него слишком много времени.

третий способ , который РАБОТАЛ, - это просто проверить jar-файлы в сертификатах вашего каталога dist. Если они отличаются, вы, как предположил Bloodboiler, попали в беду. Решение состоит в том, чтобы подписать файлы jar (извлечь, удалить META-INF), а затем подписать их ВСЕМ ЖЕ сертификатом (сделайте jar своим предпочтительным способом, затем подпишите его по своему вкусу и убедитесь, что все используемые вами банки подписаны вами ( используя jarsigner -verify -cert и т.д ...)). Тогда весь этот беспорядок должен работать.

2 голосов
/ 25 ноября 2010

У меня была точно такая же проблема, только с разными банками.Если я правильно помню, в webstart есть ошибка, которая приводит к сбою, если все jar не подписаны одним и тем же сертификатом / только с одним сертификатом.

Одним из решений является извлечение jar-библиотек и включение их содержимого вбанку вашего приложения, затем подпишите только эту банку.

1 голос
/ 26 ноября 2010

Также была та же проблема ...

Если вы когда-либо использовали Eclipse в качестве IDE, подумайте о FatJar ... Действительно облегчает процесс упаковки.Я публикую JWS JAR с более чем 40 зависимостями JAR, включенными в них.Я FatJar их, а затем подписать полученный JAR.Работает как шарм.

...