私はここ数年WebStartを使用しており、jarファイルへの署名などの経験があります。 Web Startを使用してRCPアプリをデプロイする最初の試みを行っていますが、実際にはすべてのjarに同じ証明書で署名していますが、次のエラーが発生し続けます: 'jnlpのjarリソースは同じ証明書で署名されていません'
他の誰かがこれに出くわしましたか?もしそうなら、修正する方法についてのアイデアはありますか?
JNLP/Webstartは、特定のJARに対してjarsigner.exeを介した複数の署名/署名を好まないことがわかりました。 BouncyCastle(事前に署名されている)などのJARが会社の証明書で再度署名された場合、目視検査により、新しい証明書と署名がJARで適切に実行されていると確信できます。しかし、そのJNLPはMETA-INFの最初の(アルファベット順?)署名のみを読み取っているため、他のJAR(各JARに1つのCorporate署名しかない)と一致しないと不平を言っている可能性があります。
これは、ライブラリとして使用している署名済みのjarからの古いマニフェストエントリである可能性があります。私はwebstartを介してjoglでこの問題に遭遇しました。これを試して:
すべてのjarを解凍し、すべてのMETA-INFディレクトリを削除し、jarを作成して、再度署名します。
私は、Matthewが署名済みのBouncyCastleJARで説明したのとまったく同じ経験をしました。ただし、JREバージョン1.6.0_14以降では、複数の署名を持つJARを喜んで受け入れることがわかりました(予想どおり)。したがって、上記のJNLPの「コンポーネント拡張メカニズム」を使用する必要はありませんでした。
PS 1.6.0_14リリースノートで、この修正への明らかな参照は見つかりませんでした。ただし、複数の署名付きJARがそれ以降のすべてのバージョン(少なくとも14-17 + 24)で機能することを確認しました。
FAQの1つの説明を参照してください: 異なる証明書で署名された複数のJARファイルを使用するにはどうすればよいですか?
正しい解決策。
次のスクリプトは、/ 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
私のプロジェクトでは、ロードバランサープールにいくつかのインスタンスがあり、古いバージョンのコードのインスタンスと新しいバージョンのインスタンスがあります。したがって、同じ証明書で署名されていない証明書があります。