別の問題(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 が見つかりましたが、まったく役に立ちませんでした。
JDKの異なるバージョンを使用している可能性があります。たとえば、Java_HOMEがバージョン7を指しているが、バージョン6より前にバージョン6が表示される場合、このエラーがポップアップする可能性があります。
これは、クラスパスのどこかに標準ポリシーjarファイルがある場合に発生する可能性があります。すべてのlocal_policy.jarおよびus_export_policy.jarファイルを見つけて、マシン内のこれらのjarの無制限バージョンに置き換えることをお勧めします。 IBMのWAS/Portal Server/RADを使用している場合、無制限のJCEポリシー jars へのリンクがあります。