Почему я получаю AccessControlException: доступ запрещен при добавлении BouncyCastleProvider в сервлет Security in Tomcat

1

Я создал сервлет Java и запускаю его на сервере Tomcat в веб-отеле. Он должен отправлять push-сообщения на устройства iOS, поэтому я добавил JavaPNS. Это отлично работает на моем локальном сервере Tomcat, но когда я развертываю его на сервере Tomcat, предоставляемом веб-отелем, то это утверждение:

Security.addProvider(new BouncyCastleProvider());

дает исключение:

Exception in thread "Thread-193" java.lang.InternalError: cannot create instance of org.bouncycastle.jce.provider.symmetric.AES$Mappings : java.security.AccessControlException: access denied (java.security.SecurityPermission putProviderProperty.BC) 
at org.bouncycastle.jce.provider.BouncyCastleProvider.loadAlgorithms(Unknown Source) 
at org.bouncycastle.jce.provider.BouncyCastleProvider.setup(Unknown Source) 
at org.bouncycastle.jce.provider.BouncyCastleProvider.access$000(Unknown Source) 
at org.bouncycastle.jce.provider.BouncyCastleProvider$1.run(Unknown Source) 
at java.security.AccessController.doPrivileged(Native Method) 
at org.bouncycastle.jce.provider.BouncyCastleProvider.(Unknown Source) 
at javapns.communication.ConnectionToAppleServer.(ConnectionToAppleServer.java:41) 
....

Вероятно, у веб-отеля есть какая-то защита, включенная на сервере Tomcat, которую я не включил локально.

Кто-нибудь знает, есть ли какие-либо проблемы с этой проблемой? Если нет, что я должен попросить, чтобы поддержка в веб-отеле изменилась, чтобы сделать это возможным?

Теги:
servlets
security
tomcat
bouncycastle

2 ответа

2

Не пытайтесь установить BouncyCastle в качестве поставщика. Создайте новый экземпляр BouncyCastle в своем приложении и передайте этому провайдеру перегрузку getInstance() которая принимает параметр Provider для каждой из криптографических служб.

Изменения класса Security влияют на все приложения в контейнере; они не являются локальными для вашего приложения. Используйте более целенаправленный подход, который не требует глобальных изменений.

Опора на установленного поставщика может быть удобной в автономном приложении, но в конечном итоге она создает множество проблем, когда вам нужен конкретный поставщик, а библиотека, написанная поверх JCA, не позволяет указать поставщика,

  • 0
    Спасибо. пытаясь реализовать ваше предложение, я пришел к странному выводу, что BouncyCastle не нужен в JavaPNS. Тогда я просто удалил настройку BouncyCastleProvider в качестве поставщика безопасности, и теперь он работает просто отлично!
  • 0
    Не могли бы вы показать нам пример кода для инструкций в первом абзаце?
1

Нет никакой работы. Существует ряд возможностей. Объясните своему провайдеру, что вы хотите сделать, и обсудите с ними варианты. Они включают:

  • Поставщик, устанавливающий поставщика BouncyCastle
  • Поставщик предоставляет вам необходимые разрешения для добавления поставщика самостоятельно

Обратите внимание: если у вас есть общий экземпляр Tomcat, шансы провайдера, соглашающегося на любой из вышеперечисленных, довольно тонкие.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню