質問

私は数年前からWeb Startを使用してきましたが、jarファイルへの署名の経験があります。 Webスタートを使用してRCPアプリを展開する最初の試みを行っていますが、実際には同じ証明書ですべてのjarに署名しましたが、「jnlpのjarリソースは同じ証明書で署名されていません」というエラーが表示されます

これに遭遇した人はいますか?もしそうなら、修正方法についてのアイデアはありますか?

役に立ちましたか?

解決

jarをチェックした後、同様の問題が発生した場合、サードパーティのjarが他の誰かによって署名されていることがわかりました。

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

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

こちらまたはこちらに例を示します。

他のヒント

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

すべてのjarを解凍し、すべてのMETA-INFディレクトリをパージし、jarして再度署名します。

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

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

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

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

次のスクリプトは、/ 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
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top