Как мне заставить классы javax.crypto, такие как javax.crypto.Cipher, работать с сервлетом с jboss?

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

Спасибо


person Matt    schedule 03.08.2011    source источник
comment
Версия Java 1.6.0_26 от Sun Microsystems Inc.   -  person Matt    schedule 04.08.2011


Ответы (2)


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

  • убедитесь, что все jar-файлы безопасности находятся под <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 в <jdk_home>/jre/lib/security: убедитесь, что у вас есть строка, похожая на security.provider.X=com.sun.crypto.provider.SunJCE, где X - число

  • убедитесь, что jar-файл поставщика sunJCE отсутствует в вашем WEB-INF / lib

person guido    schedule 03.08.2011
comment
Две вещи: 1.) Как я могу узнать, не запрещены ли US_export_policy.jar и local_policy.jar? У меня есть только те версии, которые были в комплекте с Java, когда я ее скачивал. 2.) Если sunJCE_provider.jar отсутствует в моем каталоге WEB-INF / lib, я получаю следующую ошибку: Servlet.service () для сервлета wfwebservice сгенерировал исключение: java.lang.ClassNotFoundException: com.sun.crypto.provider.SunJCE из [Module deployment.cm.war: main из Service Module Loader] - person Matt; 04.08.2011

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

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

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

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

person Matt    schedule 04.08.2011