18

簡単な背景: Webstart アプリケーションをリリースします。これには、独自のアプリケーション jar と多数のサードパーティ jar が含まれます。Webstart では、jnlp ファイルによって参照されるすべての分散 jar が単一の証明書によって署名されている必要があります。したがって、自己署名証明書を使用して、すべての jar (当社の jar とサードパーティの jar) に署名します。一部のサードパーティの jar は、それらを作成したパーティによって既に署名されていますが、再度署名するだけで問題なく動作します。今まで。

問題: 最近 Java 6 から Java 7 に移行したところ、突然 webstart がいくつかの jar のロードを拒否し、「無効な SHA1 署名ファイル ダイジェスト」と不平を言っています。これは一部の jar でのみ発生し、他の jar では発生せず、複数の署名を持つように見える失敗した jar 間で共通のスレッドが表示されます。

SO とインターネットを検索した後、Java の jarsigner のデフォルトの署名アルゴリズムが Java 6 と Java 7 の間で SHA1 から SHA256 に変更されたようで、さまざまな人々が「jarsigner -digestalg SHA1」を使用して検証の問題を回避することを推奨しています。 . 私はそれを試しましたが、確かに、多重署名された jar が検証されるようになりました。したがって、これは私たちの問題の回避策のようです。

私が収集した情報によると、サードパーティの署名は SHA1 署名であり、デフォルトの SHA256 で署名していたため、署名が混在しているようです。「-digestalg」スイッチを使用して SHA1 を強制すると、同じタイプの署名が 2 つになり、検証が機能するようになりました。では、アルゴリズムが異なる複数の署名が原因で問題が発生しているようですか? それとも、私が見逃している他の要因がありますか。

質問:

  1. SHA1 + SHA256 では検証に失敗するのに、SHA1 + SHA1 では検証されるのはなぜですか? 技術的な理由はありますか?セキュリティ ポリシー上の理由ですか。両方の署名が正しいことを確認できないのはなぜですか?
  2. 現在のデフォルトの SHA256 の代わりに SHA1 を使用する (引き続き使用する) ことに欠点はありますか?
4

3 に答える 3

7

サードパーティの jar を自分で再署名するのではなく、関連する jar ファイルを参照するサードパーティの署名者ごとに個別の JNLP ファイルを作成し、<extension>要素を使用してメインの JNLP をこれらに依存させることができます。すべての JAR ファイルが同じ署名者によって署名されなければならないという制限は、1 つの JNLP 内でのみ適用され、各拡張子は異なる署名者を持つことができます。

それができない場合は、独自の署名を追加する前に、サードパーティの署名を取り除くことができます ( META-INF/*.{SF,DSA,RSA}.

于 2012-09-27T07:59:49.903 に答える
1

これが少し遅れていることは承知していますが、私たちは今これを実行しています。私たちの問題は「MD2withRSA」署名の問題でした。いくつかの手順で問題を解決しました。

1) Verisign と協力して、証明書から「古い」アルゴリズムを削除しました。そのため、MD2withRSA アルゴリズムは、jar の署名に使用されなくなりました。

2) サードパーティ製の jar も山ほどあり、証明書なしで再署名します。SHA1 アルゴリズムと SHA-256 アルゴリズムの両方が MANIFEST.MF にリストされている場合、「すべての jar が同じ証明書で署名されているわけではない」というメッセージが表示されました。これは jar のほんの一部にすぎません。そのため、MANIFEST.MF ファイルの下半分を削除しました。その部分は Name: クラスとアルゴリズム仕様です。そのデータは、プロセスの最後の部分で再生成されます。解凍し、古い署名情報を除外して、再 jar します。最後のステップは、jar に再​​署名することです。場合によっては、SHA1 エントリを含む古い Name: エントリが MANIFEST.MF にある場合、署名によってそれが SHA-256 に置き換えられないことがわかったので、(今のところ) これらの jar を手動で処理します。これを処理するために、Ant タスクの更新に取り組んでいます。

申し訳ありませんが、Web Start がそれを処理/許可しない理由について話すことはできません。それを機能させる方法を見つけただけです!

幸運を!

于 2013-02-18T17:32:24.873 に答える