Почему Java сообщает мне, что мой апплет содержит как подписанный, так и неподписанный код? - PullRequest
13 голосов
/ 09 апреля 2010

Мой подписанный Java-апплет работал нормально до обновления Java 19. Теперь некоторые, но не все наши пользователи в Java Update 19 сообщают о сообщении безопасности Java, заявляющем, что наш апплет содержит как подписанный, так и неподписанный код.

Процесс создания нашего апплета выглядит следующим образом:

  1. Очистите и создайте проект апплета в среде IDE Netbeans.
  2. Откройте файл jar апплета в WinRAR и добавьте необходимые файлы .class драйвера mysql JDBC в файл jar.
  3. Подпишите файл jar апплета.

Может кто-нибудь подсказать, пожалуйста, как определить, какой код подписан, а какой код не подписан в нашем апплете? Есть ли лучший способ включить файл jar драйвера JDBC mysql в наш апплет, кроме копирования содержимого файла jar в файл jar апплета?

Спасибо

Ответы [ 3 ]

14 голосов
/ 18 апреля 2013

EDIT: из-за ошибки в Java 7 Update 45 вы не должны добавлять Trusted-Library в ваш файл манифеста. Просто добавьте новый атрибут Caller-Allowable-Codebase. См. Этот вопрос для получения дополнительной информации: Манифест Java-апплета - Разрешить все Caller-Allowable-Codebase

Обновление 21 для Java 7 было выпущено 16 апреля 2013 года, и наш апплет начал показывать это диалоговое окно с предупреждением.

В примечаниях к выпуску: Начиная с JDK 7u21 код JavaScript, который вызывает код в привилегированном апплете, обрабатывается как смешанный код, и появляются диалоговые окна с предупреждениями, если подписанные файлы JAR не помечены атрибутом Trusted-Library.

Чтобы исправить это, отредактируйте ваш файл manifest.mf и добавьте следующую строку:

Trusted-Library: true

Вы должны быть очень осторожны, прежде чем делать это, хотя. Если ваш подписанный апплет может быть вызван из javascript, то злонамеренный пользователь потенциально может совершать вредоносные действия на компьютерах ваших пользователей.

Один из быстрых способов обезопасить ваш апплет - предотвратить его запуск на других веб-сайтах. Сделайте это, поместив код в метод init(), который просматривает getCodeBase().getHost() и выдает исключение, если оно не соответствует вашему сайту.

Java 7 Update 25 представляет другой способ ограничения сайтов, на которых может выполняться ваш апплет. Вы можете установить атрибут Codebase в своем файле манифеста следующим образом:

Codebase: test.example.com www.example.com

Java 7 Update 45 (выпущено 16 октября 2013 г.) вносит дополнительные изменения в систему LiveConnect (мост javascript-to-applet), которые могут вызвать другое приглашение. В этой статье говорится об изменениях 7u45: https://blogs.oracle.com/java-platform-group/entry/liveconnect_changes_in_7u45

Как правило, вы также захотите добавить в файл манифеста следующее, чтобы избежать запросов:

Caller-Allowable-Codebase: test.example.com www.example.com

Если вы продаете продукт с апплетом и не знаете, на каких доменах он может быть развернут, вы можете указать * здесь.

11 голосов
/ 11 апреля 2010

Некоторые вещи попробовать:

  • Перейдите на панель управления Java-плагином ($ JAVA_HOME / bin / ControlPanel).
  • Перейдите на вкладку Advanced.
  • Развернуть Debug
  • Проверка Enable tracing, Enable logging и Show applet lifecycle exceptions
  • Развернуть Java console
  • Чек Show console
  • Нажмите OK (или Close, в зависимости от вашей ОС)

Когда ваш апплет загрузится, откроется консоль Java. Нажмите на него и сразу нажмите «5». Он будет записывать файлы и классы, выбранные для запуска вашего апплета. Где-то в этом должно быть сообщение, указывающее, что фляги или классы считают "без знака" Если вы пропустите его в первый раз, просто перезагрузите окно и попробуйте снова.

2 голосов
/ 09 апреля 2010

Смешивание доверенного и ненадежного кода - это уязвимость, исправленная в 6u19 (текущая версия CPU / SSR на момент написания). См. Документы. Блокировка микса или использование отладчика должны показать, где проблема.

...