Подтвердить что ты не робот

Что означает предупреждение Java Applet о безопасности "JAR файл манифеста не содержит атрибут Permissions"?

У меня есть Java-апплет, которому нужен доступ к локальной файловой системе клиента. Я создал простой сертификат для себя (он НЕ сертифицирован Verisign, Commodo,...). Я подписал банку со следующим шаблоном:

del \Users\koalabruder\.keystore
"C:\Program Files\Java\jdk1.7.0_45\bin\keytool" -genkey -alias %1 -keypass kp -dname "cn=inin" -storepass ab987c
"C:\Program Files\Java\jdk1.7.0_45\bin\jarsigner.exe" -storepass abc -keypass kp %2 %1
"C:\Program Files\Java\jdk1.7.0_45\bin\keytool" -export -storepass abc -alias %1 -file %3

Простое предупреждение о безопасности, что у меня есть "подписанный сертификат", существует уже много лет и не является моей проблемой.

Моя проблема в том, что предупреждение безопасности изменилось, потому что одно из последних обновлений Java:

Это приложение будет заблокировано в будущем обновлении безопасности Java, поскольку манифест JAR файла не содержит атрибута Permissions. Для получения дополнительной информации свяжитесь с издателем.

Что это значит? Как я могу это исправить? Нужно ли мне покупать сертификат? Должен ли я исправлять манифест (MANIFEST.MF)? Что такое атрибут Permission?

Обновление: Вот мой манифест из файла jar

Manifest-Version: 1.0
Ant-Version: Apache Ant 1.8.4
Application-Name: inin 
Permissions: all-permissions 
Created-By: 1.7.0_45-b18 (Oracle Corporation)

Name: net/inin/transfer/ul/UlPanel.class
SHA-256-Digest: asdfasddddddddddddddddddddddddddddddddd=
4b9b3361

Ответ 1

Вам не нужно покупать сертификат, просто исправить файл манифеста.

Добавьте эту строку:

permissions: all-permissions

Или эта строка, если вам нужен только ограниченный доступ:

permissions: sandbox

Ответ 2

Я столкнулся с той же проблемой, и изменение моего манифеста не исправить.

Наконец, я узнал, что я ссылался на библиотеку, которая приходила в свою банку со своим собственным манифестом. Я использовал копию этого jar файла, у которого не было Разрешений и Codebase.

Итак, если вы ссылаетесь на любые библиотеки, кроме библиотеки JRE System, проверьте манифест в файле jar (например, открыв его с помощью 7zip). Если он не содержит атрибутов, вы можете:

  • проверьте, есть ли у производителя новая версия. Возможно, он уже заметил эту проблему.
  • Разархивируйте файл jar, отредактируйте манифест и снова запустите его, или
  • Объедините библиотеку со своей собственной банкой.

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

Ответ 3

В Netbeans я заметил, что файл манифеста генерируется во время сборки. Вкратце, что я сделал, чтобы исправить эту проблему, чтобы включить мои атрибуты манифеста внутри этого шаблона, который отвечает за генерацию манифеста.

Для этого выполните следующие действия:

1- Откройте этот файл с любым редактором: (PATH)\nbproject\jfx-impl.xml
(PATH): путь вашего проекта.

2- Поиск: "//manifest". мой вид выглядит следующим образом:

                // manifest
                var man = jar.createManifest();
                var a1val = project.getProperty("application.vendor");
                var a1 = new org.apache.tools.ant.taskdefs.Manifest.Attribute();
                a1.setName("Implementation-Vendor");
                a1.setValue(a1val);
                man.addConfiguredAttribute(a1);
                var a2val = project.getProperty("application.title");
                var a2 = new org.apache.tools.ant.taskdefs.Manifest.Attribute();
                a2.setName("Implementation-Title");
                a2.setValue(a2val);
                man.addConfiguredAttribute(a2);
                var a3 = new org.apache.tools.ant.taskdefs.Manifest.Attribute();
                a3.setName("Implementation-Version");
                a3.setValue("1.0");
                man.addConfiguredAttribute(a3);


                //******insert your Attributes code here*******

                jar.perform();

3- В разделе "// * введите здесь свои атрибуты **", вы можете вставить свой собственный код атрибутов манифеста, в моей ситуации его достаточно, чтобы включить код, и разрешения.. вы также можете использовать мой код:

                ...                 
                //******insert your Attributes here*******
                var a50 = new org.apache.tools.ant.taskdefs.Manifest.Attribute();
                a50.setName("permissions");
                a50.setValue("all-permissions");
                man.addConfiguredAttribute(a50);

                var a51 = new org.apache.tools.ant.taskdefs.Manifest.Attribute();
                a51.setName("codebase");
                a51.setValue("*");
                man.addConfiguredAttribute(a51);
                ...

4 Затем создайте, и вы не увидите этого предупреждения снова.

Некоторые примечания:

  • Я настоятельно рекомендую проверить документацию атрибутов манифеста, относящуюся к security @http://docs.oracle.com/javase/tutorial/deployment/jar/secman.html

  • Не используйте значение "*" подстановочного знака в базе кода, и лучше использовать https вместо http для обеспечения безопасности:-) Я использую его только для разработки.

удачи ".

Ответ 4

Я встретил это предупреждение при обновлении подписи на уже существующем апплете (компоненте, который взаимодействует с пользовательской смарт-картой, и поэтому для корректной работы необходимо подписаться с "сильным" сертификатом).

Добавление также атрибута codebase, например: "Codebase: xyz.com" на самом деле заставляет предупреждение исчезнуть (обратите внимание, что исходный текст предупреждения ссылался, как и в этом случае, на вопросы, связанные с атрибутом "Разрешение", а не с базой кода один...).

Возможно, это ошибка в jre?