Есть ли другой способ использования подписанных апплетов - PullRequest
1 голос
/ 16 ноября 2010

Если я хочу развернуть высокопривилегированные апплеты, они должны быть подписаны.Для этого создается сертификат, а затем файл jar подписывается с помощью jarsigner.После этого в HTML-коде нужно указать код, кодовую базу и архив (jar), который мы подписали ранее.

Однако я написал сервлет, который действует как две вещи:

  1. он сидит наURL-адрес, указываемый базой кодов, и передает байт-код класса апплету.
  2. Тот же сервлет также использует сериализацию для связи с апплетом, когда всякий раз, когда апплет получает класс, он не знает, идет ли он в кодовую базу, которая заканчивается в сервлете.
Почти какнастройка mini RMI но проще.Я надеюсь, вы можете увидеть всю мощь в этом.

К сожалению, для подписанных апплетов нужен архив.Теперь сервлет также может загружать объект Certificate и также может отправлять его в апплет.Итак, вот настройка: в какой-то момент апплет получает байт-код класса и также имеет сертификат.Было бы неплохо, если бы апплет мог создавать экземпляры всех полученных классов, используя этот сертификат (в противном случае код из jar подписан, а извне нет, что вызывает неприятные сообщения для пользователя).

Так что мой вопрос к вам хорошПоклонники Java: Может ли я каким-либо образом использовать данные байт-кода и сертификат для создания экземпляра класса как подписанного объекта, чтобы плагин открывал диалоговое окно "Безопасность", принимал сертификат и повышал привилегии объекта.Что я мог бы найти, так это то, что существует класс CodeSource, который принимает кодовую базу URL и сертификат и имеет важное значение для процесса подписания.Что я не уверен, так это то, как можно перехватить загрузку классов внутри апплетов, чтобы установить дополнительные сертификаты, не полученные через JAR-файл через архив.

Что вы говорите?Большое спасибо.

1 Ответ

0 голосов
/ 13 января 2011

Я не убежден в использовании загрузочных классов, которые генерируются на лету.

Сказав это, простой, но опасный способ сделать классы с полным доступом - это вызвать ..

System.setSecurityManager(null);

.. на ранней стадии апплета init ().Это может привести к сбою в изолированном апплете, но будет работать в доверенном апплете.

Лучшим (более безопасным) способом достижения желаемого результата будет реализация настраиваемого менеджера безопасности - такого, который предоставляет только повышенные привилегии.к коду, поступающему с сервера.

Внедрение менеджера безопасности может показаться утомительным, но его легко сделать тривиальным.Посмотрите этот ответ для System.ext () потока из comp.lang.java.programming для примера.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...