Как избежать апплетов "Хотите запустить это приложение?"всплывающее сообщение - PullRequest
0 голосов
/ 20 мая 2019

Недавно нам пришлось обновить Java JRE до 1.8.0_201 для старого веб-приложения с использованием единого подписанного апплета. С тех пор при запуске апплета "Вы хотите запустить это приложение?" Во всплывающем окне отображается подробная информация: «Это приложение будет работать с неограниченным доступом, что может поставить под угрозу ваш компьютер и личную информацию. Запустите это приложение, если вы доверяете расположению и издателю, указанному выше».

Согласно этой статье oracle это вызвано тем, что манифест не содержит атрибута Permissions. Проверка показывает, что MANIFEST.MF содержит атрибут.

Manifest-Version: 1.0
Application-Name: MyApplet
Implementation-Title: My Applet
Svn-Url: 
Job-Name: 
Implementation-Version: 3.12.0-SNAPSHOT
Build-Number: 
Archiver-Version: Plexus Archiver
Built-By: username
Implementation-Vendor-Id: nl.myorg.myapplet
Application-Library-Allowable-Codebase: *.myorg.nl       
 localhost
  127.0.0.1
Implementation-Vendor: My Organisation
Build-Tag: 3.12.0-SNAPSHOT
Caller-Allowable-Codebase: *.myorg.nl localhost 127.0.0.1
Permissions: sandbox
Codebase: *.myorg.nl               localhost 127.0.0.1
Svn-Revision-LastChange: 
Created-By: Apache Maven 3.1.1
Build-Jdk: 1.8.0_171
Svn-Revision: 

Я думаю, что эта проблема связана с Java-апплетом и веб-запуском - подписывание кода . Поэтому я попытался запустить апплет в песочнице, чтобы запретить запрашивать у пользователей полные разрешения.

Я добавил запись <Permissions>sandbox</Permissions> в манифест апплетов.

Изменены настройки безопасности в апплетах jnlp с

  <security>
    <all-permissions/>
  </security>

до

  <security>
    <j2ee-application-client-permissions />
  </security>

И добавил <PARAM name=permissions value=sandbox> к <applet></applet>.

После внесения этих изменений появляется всплывающее окно с «ExitException: настройки безопасности Java не позволяют этому приложению работать. Вы можете изменить это поведение в Панели управления Java. '.

Консоль Java дает некоторые дополнительные сведения;

cache: Create from verifier: JarSigningData{hasOnlySignedEntries=true, hasSingleCodeSource=true, hasMissingSignedEntries=false}
java.lang.SecurityException: JAR manifest requested to run in sandbox only: http://localhost:8080/MyApplet/static/3.12.0-SNAPSHOT/applets/MyApplet.jar
    at com.sun.deploy.security.DeployManifestChecker.verify(Unknown Source)
    at com.sun.deploy.security.DeployManifestChecker.verify(Unknown Source)
    at com.sun.javaws.security.AppPolicy.grantUnrestrictedAccess(Unknown Source)
    at com.sun.javaws.security.JNLPSignedResourcesHelper.checkSignedResourcesHelper(Unknown Source)
    at com.sun.javaws.security.JNLPSignedResourcesHelper.checkSignedResources(Unknown Source)
    at sun.plugin2.applet.JNLP2Manager.prepareLaunchFile(Unknown Source)
    at sun.plugin2.applet.JNLP2Manager.loadJarFiles(Unknown Source)
    at sun.plugin2.applet.Plugin2Manager$AppletExecutionRunnable.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)
basic: The Java security settings have prevented this application from running. You may change this behavior in the Java Control Panel.
basic: Dialog type is not candidate for embedding

Поскольку DeployManifestChecker.verify выдает исключение, может ли быть ошибка в файле jnlp? Если да, то как определить, что не так?

1 Ответ

0 голосов
/ 21 мая 2019

Решение заключается в сохранении открытого ключа сертификата апплета очень специфическим способом в java доверенный .certs в каталоге пользователя.Rust.certs находится в папке \ Users {имя пользователя} \ AppData \ LocalLow \ Sun \ Java \ Deployment \ security.

Сертификат должен быть загружен, как описано ниже

"\Program Files\Java\jre1.8.0_201\bin\keytool.exe" -import -alias deploymentusercert$tsflag$loc=http//localhost:8080##jnlp:http//localhost:8080##docbase:http//localhost:8080##from:http//localhost:8080java.util.random@1dc6cb9 -file D:\Desktop\APP-CERT.csr -keystore trusted.certs

Псевдоним, кажется, неправильно используется для хранения связанного местоположения сайта и jnlp.Псевдоним должен иметь заголовок «deployusercert $ tsflag $» и ссылку на экземпляр java для java.util.random в качестве хвостового текста.Между свойствами loc, jnlp, docbase и from необходимо указать, где разделитель между loc и значением равен '=', а для остальных ':'.

Единственная проблема заключается в том, что хранилище ключей, созданное через панель управления Java, не имеет пароля.Если перед добавлением сертификата апплета не существует доверенных сертификатов, необходимо написать небольшое приложение Java или использовать инструмент, отличный от keytool, для создания хранилища ключей.Это потому, что keytool не позволяет создавать хранилище ключей без пароля.Или вы можете сделать мир немного безопаснее, используя защищенное паролем хранилище доверенных сертификатов Java: -D.

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