Как мне получить классы javax.crypto, такие как javax.crypto.Cipher, для работы на сервлете с jboss? - PullRequest
0 голосов
/ 04 августа 2011

Мое приложение проверяет файл лицензии, чтобы оно работало. Это делается путем вызова 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*..)

Как я уже сказал, он отлично работает из командной строки и затмения, но не как сервлет на jboss. Кто-нибудь знает, что мне нужно делать? Я использую jdk 1.6 и jboss как 7.

Спасибо

Ответы [ 2 ]

1 голос
/ 05 августа 2011

Я понял, что случилось с моим кодом.Ранее в коде по какой-то причине кто-то делал следующее:

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

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

Поэтому по какой-то причине мы удаляли первоначальный провайдер javas SunJCE, затем добавляли нового, а этот новый не проходил проверку подлинности.

1 голос
/ 04 августа 2011

Есть несколько возможных проблем, которые могут возникнуть, похоже, это проблема с classpath, когда sun / oracle jvm пытается аутентифицировать файлы поставщика

  • проверить, что все файлы безопасностинаходятся под <jdk_home>/jre/lib/ext jvm, который запускает jboss (то есть US_export_policy.jar, sunjce_provider.jar, local_policy.jar ....)

  • о US_export_policy.jar и local_policy.jarубедитесь, что вы скачали неограниченную версию

  • java.security file в <jdk_home>/jre/lib/security: убедитесь, что есть строка, аналогичная security.provider.X=com.sun.crypto.provider.SunJCE, где X - это число

  • убедитесь, что банка JJ провайдера SunJCE нет в вас. WEB-INF / lib

...