1

次のライブラリ/jar を使用する JWS (Java Web Start) を展開したアプレットがあります。

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

bcprov-ext-jdk16-145 (弾む城)

これらすべてのライブラリーをアプレットに入れている理由は、red5.jar では他のライブラリーも必要とするためです。ただし、BouncyCastle は ClassLoader によってロードされず、WebStart プロジェクトのコンパイル中に Netbeans によって署名されません。どうすればそれを解決できますか?

アーカイブに 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

私の IDE では、どの jar が Bouncy Castle jar を必要としているかわかりません。さらに、プロジェクトに Bouncy Castle.jar を含めても、Netbeans はデフォルトで署名する必要がありますが、Web Start プロジェクト内の他のすべての jar に署名しますが、署名しません。ただし、jarsigner を使用して簡単に確認すると、Bouncy Castle を含むすべての jar が署名されていることが示されるため、Bouncy Castle が別の証明書で署名されていることを除いて、すべて署名されていると安全に想定できます。

そして、ここに私の質問があります:すべてのファイルに手動で署名しようとする必要がありますか(すべて同じ証明書を持つようにする必要があります)、それとも別の場所に問題がありますか(BouncyCastleがアプレットで署名できないなど)?

どんなポインタでも高く評価されます

編集:

私は基本的に2つのアプローチを持っていますが、どちらも今まで失敗しました:

アプローチ 1. 各 jar のディレクトリ ツリーを抽出し、それらを共有ディレクトリにまとめてダンプし、このディレクトリの jar を作成して、その中のすべてのファイルが同じ証明書 (1 つの jar、1 つの証明書、右..) によって署名されるようにします。ただし、 spring STILL は、すべてのライブラリが allLibs.jar にダンプされる dist\libs\allLibs.jar ではなく、dist\libs\bcProv.jar のようにファイルが編成されることを期待しています。JWS を介してデプロイされた場合、Spring はライブラリを見つけることができないため、このアプローチは惨めに失敗します。

アプローチ 2. すべての jar に同じ証明書を使用して手動で署名します。10 分かけて jar に手動で署名した後、このアプローチも失敗し、bcProv.jar が他の証明書と同じ証明書で署名されていないというエラーをスローする大胆さがあります。

私は困惑し、困惑し、混乱しています。何か案は?これらのjarをJWSアプレットにまとめることはまったく可能ですか:

red5.jar

spring-beans.jar

spring-context.jar

spring-core.jar

apache-mina.jar

bcprov-ext-jdk16-145

4

3 に答える 3

4

わかりましたので、ここに答えがあります:

まず第一に、Bloodboiler が示唆したように、アプレットが異なる証明書で署名された jar を使用している場合、問題が発生します。したがって、解決策は、それらすべてに同じ証明書で署名することです。

ここにはいくつかの可能性があります:

1 つは、プロジェクトのすべての jar を抽出し、それらを単一の jar に結合して署名することです。これは、何らかの理由で Spring-context と BouncyCastle では機能しません。私がそれをいじる神経を持っていれば、それはうまくいったと確信しています.

もう 1 つの方法は、M.Joanis が提案したように、FatJar を使用することですが、これも何らかの理由で機能しませんでした。上記の方法に関しては、あまり時間をかけたいという気持ちや傾向はありませんでした。

3番目の方法、つまり機能した方法は、distディレクトリの証明書でjarを確認することです。それらが異なる場合、ブラッドボイラーが示唆したように、あなたは困っています。解決策は、jar の署名を解除し (抽出、 META-INF を削除)、同じ証明書ですべて署名することです (jar を好みの方法で作成してから、好みの方法で署名し、使用するすべての jar が自分によって署名されていることを確認します ( jarsigner -verify -cert などを使用します...))。その後、この混乱全体が機能するはずです。

于 2010-11-26T08:06:22.817 に答える
2

ジャーが異なるだけで、まったく同じ問題がありました。私の記憶が正しければ、webstart にはバグがあり、すべての jar が同じ証明書または 1 つの証明書のみで署名されていない限り失敗します。

1 つの解決策は、ライブラリ jar を抽出し、そのコンテンツをアプリケーション jar に含めてから、その jar だけに署名することです。

于 2010-11-25T09:16:36.970 に答える
1

また、同じ問題がありました...

Eclipse を IDE として使用している場合は、FatJarについて考えてみてください。パッケージ化プロセスが本当に簡単になります。40 を超える JAR 依存関係が含まれる JWS JAR を公開しています。それらを FatJar し、結果の JAR に署名します。魅力のように機能します。

于 2010-11-26T06:30:31.933 に答える