Утилита Java для проверки подписанных JAR-файлов

Все,

Есть ли хорошая бесплатная утилита Java, которая показывает ключ, которым был подписан файл JAR?

У меня есть несколько файлов JAR, на которые есть ссылки в моем приложении, и я хочу знать, какие из них были подписаны одним и тем же сертификатом.

По сути, я хочу знать это, поскольку, когда я запускаю свой файл JNLP (ура!) Меня приветствует сообщение «Ресурсы JAR в файле JNLP не подписаны одним и тем же сертификатом».

Я просмотрел ресурсы jar в jnlp. подписано тем же сертификатом

У меня довольно много JARS, так что утилита пригодится.

Редактировать

Главный вопрос заключается в том, есть ли инструмент, который может показать мне, какие JAR-файлы были подписаны каким сертификатом. К сожалению, инструмент jarsigner только сообщает мне, подписаны они или нет, а не кем/чем.

К сожалению, я до сих пор не нашел ни одного инструмента.

конец Править

Ваше здоровье,

Андез


person Andez    schedule 21.06.2011    source источник


Ответы (4)


Проще всего просто подписать их все своим ключом.

person Thorbjørn Ravn Andersen    schedule 21.06.2011
comment
Я надеялся, что мой netbeans 7 будет делать это. Я сгенерировал ключ, и выходные данные проекта показывают, что он подписал все файлы с моим ключом. Однако, когда я запускаю свой файл JNLP, он требует отличия. - person Andez; 21.06.2011
comment
Рассмотрите возможность включения консоли Java и установите уровень журнала для трассировки. Это позволяет вам видеть отладочные сообщения, которые javaws выдает при загрузке вашего приложения. - person Thorbjørn Ravn Andersen; 21.06.2011

Вы ознакомились с jarsigner?

person Dimitri    schedule 21.06.2011
comment
Привет Дмитрий. Да, это было первое, что я попробовал. Однако jarsigner -verify -certs myjarfile.jar не дал мне реальной информации. - person Andez; 21.06.2011

Это может помочь Подписанный Jar Файл.

person Dave G    schedule 21.06.2011

Инструмент JDK JarSigner, вероятно, это то, что вы ищете. Вы найдете его в tools.jar. Доступны исходники, если вам нужно более глубокое понимание процесса подписания и проверки.

Также я думаю, что можно использовать банки с разными сертификатами. Я не проверял это, но, возможно, это поможет сделать что-то вроде

...
<resources>
    <jar href="jarwithcert1.jar"/>
</resources>
<resources>
    <jar href="jarwithcert2.jar"/>
</resources>
...

or

...
<resources>
    <jar href="jarwithcert1.jar" part="one" />
    <jar href="jarwithcert2.jar" part="two" />
</resources>
...
person alexvetter    schedule 21.06.2011
comment
@polyurethan - да, я где-то читал, что это можно сделать. Сообщение, которое я видел, было для stackoverflow.com/questions/430755/. Я еще не пробовал это. Но больше случай идентификации в минуту спасибо andez - person Andez; 21.06.2011
comment
@Andez Что ты пробовал? Это то, что я ответил, или другое решение с дополнительным jnlp для других банок? - person alexvetter; 21.06.2011
comment
@polyurethan - это двухэтапный процесс. Я нашел его на webstartfaq.com Вам нужно сделать это в 2 файлах. ‹jar href=myjar1.jar/› ‹имя расширения=Java Help href=help.jnlp/› ‹?xml version=1.0 encoding=utf-8?› ‹jnlp spec=1.0+ codebase=ws503 href=Help.jnlp› ‹information› ‹title›JavaHelp‹/title› ‹vendor›Sun Microsystems, Inc.‹/vendor› ‹/information› ‹ resources› ‹jar href=jh.jar/› ‹/resources› ‹component-desc/› ‹/jnlp› Как ни странно, причиной проблемы был файл jh.jar. - person Andez; 21.06.2011
comment
Я думал, что загрузил отсюда другой файл jh.jar до java2s.com/ Код/Jar/JKL/Downloadjh2005jar.htm. У этого не было входа. Но мой первоначальный вопрос был в том, есть ли инструмент для этого. Могу потратить некоторое время на какой-то код, с которым я столкнулся, чтобы сделать это и разместить его где-нибудь в Интернете :-/ - person Andez; 21.06.2011
comment
Да, хорошо. Но это потому, что я разместил ссылку на openjdk. Есть источник JarVerifier. Должна быть возможность создать крошечный инструмент для проверки сертификатов всех банок. С помощью URLClassLoader вы можете получить всю загруженную банку. URLClassLoader cl = (URLClassLoader) Thread.currentThread().getContextClassLoader(); URL[] urls = cl.getURLs(); for (URL url : urls) { System.out.println(url); } - person alexvetter; 21.06.2011