Всплывающее окно Java говорит, что приложения содержат и неподписанный и подписанный код
Я использую Mac 10.7 под управлением Java 1.7.0_21. Я пытаюсь запустить приложение Java-апплета, которое подписано, и ближе к концу приложения я получаю всплывающее окно с надписью "Смешанный режим безопасности" с надписью "Блокировать запуск потенциально небезопасных компонентов?". Все банки, которые я использую, подписаны.
Я могу запустить одно и то же приложение апплета на Mac 10.6 под управлением Java 6, и я не получаю предупреждение о смешанном режиме. Я также могу запустить приложение в Windows без предупреждения о смешанном режиме.
Почему я продолжаю получать эту ошибку, когда все мои банки подписаны?
Я погуглил предупреждение в смешанном режиме и нашел эту ссылку.
http://docs.oracle.com/javase/6/docs/technotes/guides/jweb/mixed_code.html
и после прочтения этой ссылки я немного запутался. Согласно этой ссылке, мне кажется, что в моем файле манифеста должен быть указан атрибут "Trusted-Only" или "Trusted-Library". Я посмотрел на мой файл манифеста, и у них нет этих атрибутов, поэтому я должен добавить их или просто того факта, что банки подписаны, должно быть достаточно.
Может кто-нибудь, пожалуйста, помогите мне понять, почему я получаю эту ошибку, даже когда все подписано?
4 ответа
Обновление 21 для Java 7 - это мощное обновление для системы безопасности, которое содержит определенное количество критических изменений.
Вы должны взглянуть на его заметки о выпуске, есть два абзаца и две известные проблемы, связанные с подписанными банками.
Ваша проблема заключается в этом:
Площадь: развернуть / плагин
Синопсис: всплывающее окно безопасности при закрытии приложения
Начиная с JDK 7u21, код JavaScript, который вызывает код в подписанном апплете, работающем со всеми разрешениями, обрабатывается как смешанный код, и появляются диалоговые окна с предупреждениями, если подписанные файлы JAR не помечены
Trusted-Library=true
приписывать. См. Смешивание кода с разрешениями и Код без разрешений (ссылка на документацию)'.Для подписанного апплета, работающего со всеми разрешениями на вызов JavaScript, не должно появляться диалоговое окно безопасности (с предупреждением о смешанном коде). Однако в некоторых сценариях отображается предупреждение о смешанном коде.
Хорошие новости: есть обходной путь:
В качестве обходного пути, если jar-файл апплета работает с полными разрешениями и использует атрибут "Trusted-library:true" в качестве записи манифеста, предупреждение о смешанном коде не появится.
У меня также есть апплет, который генерировал это предупреждение безопасности, начиная с JRE 1.7.0_21.
Вот что я узнал. "Trusted-Only: true", который вы бы указали в манифесте апплета, если не хотите, чтобы у пользователя спрашивали, разрешит ли он вызов другому подписанному банку. Вызов будет заблокирован без предупреждения безопасности. "Trusted-Library: true" вы добавляете в банку, которую вы называете. Если это указано в манифесте jar-файла и jar-файл подписан, то, когда ваш апплет вызывает его, предупреждения о безопасности не будет, и вызов не будет заблокирован.
Мой апплет использует swing-layout-1.0.4.jar. Чтобы решить эту проблему, мне пришлось добавить "Trusted-Library: true" в файл swing-layout-1.0.4.jar. Вы должны быть в состоянии сделать это с помощью приложения jar.exe в JDK.
jar vcmf swing-layout-1.0.4a.jar MyManifest.mf swing-layout-1.0.4.jar
MyManifest.mf представляет собой текстовый файл, содержащий "Trusted-Library: true". Пробел между: и true важен, и вы должны иметь возврат каретки в конце строки.
По какой-то причине я не смог заставить это работать, поэтому я перестроил компоновку Swing с использованием сетевых компонентов. Исходники для swing-layout-1.0.4 являются частью установки netbeans (под платформу). Я расстегнул молнию на ней, открыл ее как проект. Под файлами я изменил файл манифеста, чтобы иметь волшебную строку (опять же, важно иметь пробел после: и пустую строку в конце файла манифеста) и ударил сборку. Затем я подписал банку и больше не предупреждал о безопасности.
Я надеюсь, что это помогает или, по крайней мере, указывает вам правильное направление
Лучшее решение - использовать Trusted-Library=true
Однако, если вы не можете заставить это работать по какой-то причине, вы также можете изменить способ, которым компьютер обрабатывает смешанные апплеты безопасности.
http://docs.oracle.com/javase/7/docs/technotes/guides/jweb/properties.html
Создайте следующий файл на рабочей станции пользователя. C:\Windows\Sun\Java\Deployment\deployment.properties
В файле добавьте следующую строку:deployment.security.mixcode="HIDE_RUN"
Это скажет Java, чтобы скрыть предупреждение безопасности и запускать апплет всякий раз, когда есть смешанное условие кода. Также в примечаниях к выпуску написано:
Начиная с JDK 7u21, код JavaScript, который вызывает код в привилегированном апплете, обрабатывается как смешанный код, и появляются диалоговые окна с предупреждениями, если подписанные файлы JAR не помечены атрибутом Trusted-Library.
Для получения дополнительной информации см. Документацию "Смешанный код и песочница".
Релиз JDK 7u21 позволяет пользователям принимать более взвешенные решения перед запуском многофункциональных интернет-приложений (RIA), запрашивая у пользователей разрешения перед запуском RIA. Эти диалоговые окна разрешений включают информацию о сертификате, используемом для подписи приложения, местонахождении приложения и уровне доступа, который запрашивает приложение. Для получения дополнительной информации см. Принятие RIA.
К вашему сведению, JRE 6u19, если апплет содержит как привилегированные компоненты, так и компоненты песочницы, отображаются диалоговые окна с предупреждением.
Спасибо всем за ваши ответы. Я попытался добавить Trusted-Library=true на небольшом примере, и это похоже на работу. Так что теперь я буду пытаться обновить файл манифеста всех моих банок. И так как мы используем муравья, я буду делать следующее
<jar update="true" jarfile="${deploy.dir}/javaApp.jar">
<manifest>
<attribute name="Trusted-Library" value="true" />
</manifest>
</jar>
обновить файлы манифеста.