web-dev-qa-db-ja.com

jnlpのjarリソースは同じ証明書で署名されていません

私はここ数年WebStartを使用しており、jarファイルへの署名など​​の経験があります。 Web Startを使用してRCPアプリをデプロイする最初の試みを行っていますが、実際にはすべてのjarに同じ証明書で署名していますが、次のエラーが発生し続けます: 'jnlpのjarリソースは同じ証明書で署名されていません'

他の誰かがこれに出くわしましたか?もしそうなら、修正する方法についてのアイデアはありますか?

16
javamonkey79

Jarを確認した後、同様の問題が発生したとき、サードパーティのjarが他の誰かによって署名されていることがわかりました。

他の証明書によって署名されたjar用に別のjnlpファイルを作成し、jnlpファイルからこのjnlpを読み取る必要があります。

<resources>
  ...
  <extension name="other" href="other.jnlp"/>
</resources>

ここ または ここ 例を見つけることができます。

12
asalamon74

JNLP/Webstartは、特定のJARに対してjarsigner.exeを介した複数の署名/署名を好まないことがわかりました。 BouncyCastle(事前に署名されている)などのJARが会社の証明書で再度署名された場合、目視検査により、新しい証明書と署名がJARで適切に実行されていると確信できます。しかし、そのJNLPはMETA-INFの最初の(アルファベット順?)署名のみを読み取っているため、他のJAR(各JARに1つのCorporate署名しかない)と一致しないと不平を言っている可能性があります。

3

これは、ライブラリとして使用している署名済みのjarからの古いマニフェストエントリである可能性があります。私はwebstartを介してjoglでこの問題に遭遇しました。これを試して:

すべてのjarを解凍し、すべてのMETA-INFディレクトリを削除し、jarを作成して、再度署名します。

3

私は、Matthewが署名済みのBouncyCastleJARで説明したのとまったく同じ経験をしました。ただし、JREバージョン1.6.0_14以降では、複数の署名を持つJARを喜んで受け入れることがわかりました(予想どおり)。したがって、上記のJNLPの「コンポーネント拡張メカニズム」を使用する必要はありませんでした。

PS 1.6.0_14リリースノートで、この修正への明らかな参照は見つかりませんでした。ただし、複数の署名付きJARがそれ以降のすべてのバージョン(少なくとも14-17 + 24)で機能することを確認しました。

2
Per-Ivar Bakke
2
pavan

次のスクリプトは、/ some/libディレクトリ内の各jar内のRSA証明書のシリアル番号を一覧表示し、間違った証明書によって署名されたjarを見つけるのに役立ちます。

for f in $( find /some/lib -type f -name '*.jar' )
do 
   serial=$( unzip -p $f 'META-INF/*.RSA' | 
             openssl pkcs7 -inform der -print -noout |
             grep --max-count=1 serialNumber | cut -d: -f2- | tr -d ' ' )
   printf "%40s: %s\n" "$serial" "$f"
done
1

私のプロジェクトでは、ロードバランサープールにいくつかのインスタンスがあり、古いバージョンのコードのインスタンスと新しいバージョンのインスタンスがあります。したがって、同じ証明書で署名されていない証明書があります。

0
Feng Zhang