Всплывающее окно 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>

обновить файлы манифеста.

Другие вопросы по тегам