0

私のアプリケーションは、ライセンス ファイルを動作させるために検証します。これは、ライセンス キー ファイルを解読するために javax.crypto.Cipher.getInstance("DES","SunJCE") を呼び出すことによって行われます。

アプリケーションをローカルで実行するとすべて正常に動作しますが、jboss を使用してアプリケーションをデプロイし、サーブレットでライセンス ファイルを検証する段階になると、次のエラーが発生します。

java.lang.SecurityException: JCE cannot authenticate the provider SunJCE
  at javax.crypto.Cipher.getInstance(DashoA13*..)
  at javax.crypto.Cipher.getInstance(DashoA13*..)

私が言ったように、コマンド プロンプトと Eclipse からは正常に動作しますが、jboss のサーブレットとしては動作しません。私が何をする必要があるか誰にも分かりますか?jdk 1.6 と jboss を 7 として使用しています。

ありがとう

4

2 に答える 2

1

私は自分のコードの何が悪いのかを理解しました。何らかの理由でコードの前半で誰かが次のことをしました:

if (SunJCEinProviders) 
{
Security.removeProvider("SunJCE");
}   

int i = Security.insertProviderAt(new  com.sun.crypto.provider.SunJCE(),1);

そのため、何らかの理由で、javasの最初のSunJCEプロバイダーを削除してから、新しいプロバイダーを追加しましたが、この新しいプロバイダーは認証に失敗していました。

于 2011-08-04T21:47:43.830 に答える
1

考えられる問題がいくつかあります。sun/oracle jvm がプロバイダ jar を認証しようとすると、クラスパスに問題があるようです。

  • すべてのセキュリティ jar が<jdk_home>/jre/lib/extjboss を実行する jvm の下にあることを確認します (つまり、US_export_policy.jar、sunjce_provider.jar、local_policy.jar など)。

  • US_export_policy.jar と local_policy.jar については、必ず無制限版をダウンロードしてください。

  • の java.security ファイル: X が数字の<jdk_home>/jre/lib/securityような行があることを確認してくださいsecurity.provider.X=com.sun.crypto.provider.SunJCE

  • sunJCE プロバイダー jar が WEB-INF/lib にないことを確認してください

于 2011-08-03T21:10:16.860 に答える