web-dev-qa-db-ja.com

java.lang.SecurityException:管轄ポリシーファイルは信頼できる署名者によって署名されていません

別の問題(RMIに関連する)で作業する際に、システムの「セキュリティフォルダー」を「無制限の強度」ポリシーファイルでアップグレードしたところ、アプリケーションが別の方法で失敗しました。長いスタックダンプが発生しますが、次のビットが関連しているようです:

Exception in thread "main" Java.lang.ExceptionInInitializerError

[...crop...]

Caused by: Java.lang.SecurityException: Can not initialize cryptographic mechanism
        at javax.crypto.JceSecurity.<clinit>(JceSecurity.Java:86)
        ... 17 more
Caused by: Java.lang.SecurityException: The jurisdiction policy files are not signed by a trusted signer!

[...crop...]

ええと、WTF?唯一の変更点は、元のjarファイルを脇に移動し、無制限のものを$ Java_HOME/lib/securityに追加したことです。このディレクトリは次のようになります。

$ ls
blacklist      javaws.policy               trusted.libraries
cacerts        local_policy.jar            US_export_policy.jar
Java.policy    local_policy.jar.strong     US_export_policy.jar.strong
Java.security  local_policy.jar.unlimited  US_export_policy.jar.unlimited

もちろん、.strongおよび.unlimitedバージョンがあるので、すぐに切り替えることができます。

指示は簡潔で分かりやすく、これらの2つのファイル(local_policy.jarおよびUS_exportpolicy.jar)の置換のみを想定しているように見えます。

他に何がありますか?

Javaのバージョンとポリシーファイルは、それぞれ最新の1.7.0_03とjce_policy-6であることに注意してください。

追伸同様のタイトルの記事 here が見つかりましたが、まったく役に立ちませんでした。

42
Richard T

これは、Javaバージョンがポリシーファイルのバージョンと一致しない場合に発生します。関連するポリシーファイルは次のリンクからダウンロードできます。

Java 8 のポリシーjar
Java 7 のポリシーjar
Java 6 のポリシーjar

15
prageeth

JDKの異なるバージョンを使用している可能性があります。たとえば、Java_HOMEがバージョン7を指しているが、バージョン6より前にバージョン6が表示される場合、このエラーがポップアップする可能性があります。

4
Somaiah Kumbera

これは、クラスパスのどこかに標準ポリシーjarファイルがある場合に発生する可能性があります。すべてのlocal_policy.jarおよびus_export_policy.jarファイルを見つけて、マシン内のこれらのjarの無制限バージョンに置き換えることをお勧めします。 IBMのWAS/Portal Server/RADを使用している場合、無制限のJCEポリシー jars へのリンクがあります。

4
kpamu