Вопрос

Наш продукт остановлен на Java версии 1.5.0_13, и мы хотели бы обновить его.Наше программное обеспечение развертывает большое количество jar-файлов через Java Web Start;все эти банки должны быть подписаны.Однако пара jar-файлов не содержат файлов классов, и, начиная с Java версии 1.5.0_14, похоже, что утилита jarsign предпочитает не подписывать любые jar-файлы, которые не содержат файлов классов.

Что я могу сделать, чтобы заставить jarsign подписать эти банки?Или что я могу сделать, чтобы распространять эти jar-файлы через Java Web Start без их подписи?И есть ли где-нибудь, где задокументировано это изменение jarsign с версиями 1.5.0_14 и выше?Я не могу найти это в примечания к выпуску.

Это было полезно?

Решение

Я не могу проверить, есть ли какая-либо проблема.Можете ли вы просмотреть и увидеть, что может измениться в вашем окружении?Я работаю на Windows 7 RC.

Давайте проверим версию:

C:\temp>java -version
java version "1.5.0_14"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_14-b03)
Java HotSpot(TM) Client VM (build 1.5.0_14-b03, mixed mode, sharing)

Давайте посмотрим, что будет в нашей банке:

C:\temp>dir /s /b com
C:\temp\com\rdc
C:\temp\com\rdc\test
C:\temp\com\rdc\test\logging.properties

Давайте приготовим банку:

C:\temp>jar -cfv test-source.jar com/*
added manifest
adding: com/rdc/(in = 0) (out= 0)(stored 0%)
adding: com/rdc/test/(in = 0) (out= 0)(stored 0%)
adding: com/rdc/test/logging.properties(in = 13) (out= 15)(deflated -15%)

Давайте подпишем банку:Я использую самозаверяющий сертификат.

C:\temp>jarsigner -signedjar test-dest.jar test-source.jar vinay
Enter Passphrase for keystore:

Warning: The signer certificate will expire within six months.

Давайте посмотрим, что находится в нашей подписанной банке:

C:\temp>jar tvf test-dest.jar
   155 Wed Jul 15 23:39:12 BST 2009 META-INF/MANIFEST.MF
   276 Wed Jul 15 23:39:12 BST 2009 META-INF/VINAY.SF
  1130 Wed Jul 15 23:39:12 BST 2009 META-INF/VINAY.DSA
     0 Wed Jul 15 23:37:18 BST 2009 META-INF/
     0 Wed Jul 15 19:44:44 BST 2009 com/rdc/
     0 Wed Jul 15 19:44:58 BST 2009 com/rdc/test/
    13 Wed Jul 15 23:37:10 BST 2009 com/rdc/test/logging.properties

Хорошо, похоже, что он определенно был подписан, и в нем нет классов.Давайте посмотрим на содержание MANIFEST.MF:

Manifest-Version: 1.0
Created-By: 1.5.0_14 (Sun Microsystems Inc.)

Name: com/rdc/test/logging.properties
SHA1-Digest: Ob/S+a7TLh+akYGEFIDugM12S88=

И содержание VINAY.SF:

Signature-Version: 1.0
Created-By: 1.5.0_14 (Sun Microsystems Inc.)
SHA1-Digest-Manifest-Main-Attributes: 4bEkze9MHmgfBoY+fnoS1V9bRPs=
SHA1-Digest-Manifest: YB8QKIAQPjEYh8PkuGA5G8pW3tw=

Name: com/rdc/test/logging.properties
SHA1-Digest: qXCyrUvUALII7SBNEq4R7G8lVQQ=

Теперь давайте проверим банку:

C:\temp>jarsigner -verify -verbose test-dest.jar

         155 Wed Jul 15 23:51:34 BST 2009 META-INF/MANIFEST.MF
         276 Wed Jul 15 23:51:34 BST 2009 META-INF/VINAY.SF
        1131 Wed Jul 15 23:51:34 BST 2009 META-INF/VINAY.DSA
           0 Wed Jul 15 23:37:18 BST 2009 META-INF/
           0 Wed Jul 15 19:44:44 BST 2009 com/rdc/
           0 Wed Jul 15 19:44:58 BST 2009 com/rdc/test/
smk       13 Wed Jul 15 23:37:10 BST 2009 com/rdc/test/logging.properties

  s = signature was verified
  m = entry is listed in manifest
  k = at least one certificate was found in keystore
  i = at least one certificate was found in identity scope

jar verified.

Warning: This jar contains entries whose signer certificate will expire within
six months. Re-run with the -verbose and -certs options for more details.

На первый взгляд кажется, что все в порядке.Можете ли вы проверить, истек ли срок действия ваших сертификатов или они были отозваны?Используете ли вы самоподписанные сертификаты или настоящие сертификаты?Или я неправильно понял, в чем ваша проблема?

Другие советы

Для всех, кто ищет по этой проблеме, мы определили, что это влияет только на некоторые более поздние версии Java 1.5, я полагаю, начиная с 1.5.0_14 и далее.Похоже, это исправлено в последних версиях 1.5 и определенно исправлено в 1.6.

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

Кстати, я попробовал то же самое, что и Vinay, но с jarsigner JDK 1.5.0_17 и соответствующим сертификатом Verisign, и получил те же результаты.Jarsigner сработал, и jar прошел проверку с помощью jarsigner -verify .

Добавляя об этом :Я использую Java Web Start, и у меня есть jar, который содержит только изображения.С JDK 1.6_05 (07, 10 тоже) и Ant generation он подписывается без проблем (с самозаверяющим сертификатом).Итак, как и другие описанные, похоже, что он не связан с jar, содержащим файлы .class, или нет.

Это маловероятно, но Муравей Задача SignJar возможно, удастся убедить jarsign поступить правильно.Там есть куча вариантов, которые могут склонить чашу весов.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top