4

当社の製品は Java バージョン 1.5.0_13 で停止しており、アップグレードしたいと考えています。当社のソフトウェアは、Java Web Start を介して多数の jar をデプロイします。これらの jar はすべて署名する必要があります。ただし、いくつかの jar にはクラス ファイルが含まれておらず、Java バージョン 1.5.0_14 以降では、jarsign ユーティリティはクラス ファイルを含まない jar に署名しないことを選択しているようです。

jarsign にこれらの jar に署名させるにはどうすればよいですか? または、これらの jar を署名せずに Java Web Start を介して配布するにはどうすればよいでしょうか? また、バージョン 1.5.0_14 以降での jarsign へのこの変更が文書化されている場所はありますか? リリース ノートで見つけられません。

4

6 に答える 6

9

問題があることを確認できていません。自分の環境で何が違うのかをよく見て確認できますか? Windows 7 RC で実行しています。

バージョンを確認しましょう。

C:\temp>java -バージョン
Java バージョン「1.5.0_14」
Java(TM) 2 ランタイム環境、標準版 (ビルド 1.5.0_14-b03)
Java HotSpot(TM) クライアント VM (ビルド 1.5.0_14-b03、混合モード、共有)

jar に何が入っているか見てみましょう。

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/*
マニフェストを追加しました
追加: com/rdc/(in = 0) (out= 0)(格納 0%)
追加: com/rdc/test/(in = 0) (out= 0)(保存 0%)
追加: com/rdc/test/logging.properties(in = 13) (out= 15)(収縮 -15%)

jar に署名しましょう: 自己署名証明書を使用しています。

C:\temp>jarsigner -signedjar test-dest.jar test-source.jar vinay
キーストアのパスフレーズを入力してください:

警告: 署名者証明書は 6 か月以内に期限切れになります。

署名済みの jar の内容を見てみましょう。

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

OK、確かに署名されているようで、クラスはありません。の内容を見てみましょうMANIFEST.MF:

マニフェスト バージョン: 1.0
作成者: 1.5.0_14 (Sun Microsystems Inc.)

名前: com/rdc/test/logging.properties
SHA1 ダイジェスト: Ob/S+a7TLh+akYGEFIDugM12S88=

そしての内容VINAY.SF

署名バージョン: 1.0
作成者: 1.5.0_14 (Sun Microsystems Inc.)
SHA1-Digest-Manifest-Main-Attributes: 4bEkze9MHmgfBoY+fnoS1V9bRPs=
SHA1 ダイジェスト マニフェスト: YB8QKIAQPjEYh8PkuGA5G8pW3tw=

名前: com/rdc/test/logging.properties
SHA1 ダイジェスト: qXCyrUvUALII7SBNEq4R7G8lVQQ=

それでは、jar を確認しましょう。

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

         155 水曜日 7 月 15 日 23:51:34 BST 2009 META-INF/MANIFEST.MF
         276 水曜日 7 月 15 日 23:51:34 BST 2009 META-INF/VINAY.SF
        1131 水曜日 7 月 15 日 23:51:34 BST 2009 META-INF/VINAY.DSA
           0 水曜日 7 月 15 日 23:37:18 BST 2009 META-INF/
           0 水曜日 7 月 15 日 19:44:44 BST 2009 com/rdc/
           0 水曜日 7 月 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 = 署名が検証されました
  m = エントリはマニフェストに記載されています
  k = キーストアで少なくとも 1 つの証明書が見つかりました
  i = ID スコープで少なくとも 1 つの証明書が見つかりました

ジャーが確認されました。

警告: この jar には、署名者証明書が期限切れになるエントリが含まれています。
六ヶ月。詳細については、-verbose および -certs オプションを指定して再実行してください。

一見、すべてが順調に見えます。証明書の有効期限が切れていないか、または失効しているかどうかを確認できますか? 自己署名証明書または実際の証明書を使用していますか? または、あなたの問題が何であるかを誤解していますか?

于 2009-07-15T22:57:02.157 に答える
2

この問題を検索している人は、Java 1.5の特定の新しいバージョン、1.5.0_14以降のバージョンにのみ影響すると判断しました。1.5の最新バージョンで修正されているようで、1.6で確実に修正されています。

于 2009-09-03T14:37:54.183 に答える
1

ところで、私はVinayと同じことを試しましたが、JDK 1.5.0_17 jarsignerと適切なVerisign証明書を使用して、同じ結果を得ました。Jarsignerは機能し、jarはjarsigner-verifyを使用して検証されました。

于 2009-07-17T21:16:59.990 に答える
1

実現は遠いですが、Ant SignJar タスクによって、jarsign が正しいことを実行するよう説得できる可能性があります。バランスを崩す可能性のあるオプションがたくさんあります。

于 2009-07-14T20:14:42.517 に答える
1

それについて追加:私はJava Web Startを使用しており、画像のみを含むjarを持っています。JDK 1.6_05 (07、10 も) および Ant 世代では、問題なく署名されています (自己署名証明書を使用)。したがって、他の人が説明したように、.class ファイルを含む jar ファイルにリンクされているようには見えません。

于 2009-07-20T13:53:01.720 に答える
1

必要に応じて、ダミーのクラス ファイルを入れることができます。おそらく不愉快ですが、必要かもしれません。

于 2009-06-10T16:45:42.193 に答える