【问题标题】:Webstart Security is Impossible. Trying to use with glassfhish 4Webstart 安全是不可能的。尝试与 glassfhish 4 一起使用
【发布时间】:2015-05-01 14:04:18
【问题描述】:

最终目标是使用 Glassfish 4 中的 Java webstart 提供应用程序客户端下载。

我已经尝试了 3 天,研究了我能找到的所有方法,无论我尝试什么,webstart 都被阻止了。

  • 例外列表。不起作用。
  • 将证书添加为受信任的证书。不起作用。
  • 不需要任何权限的沙盒。不起作用。
  • 更新 Java。不起作用。
  • 我似乎找不到部署规则集选项,但这听起来需要完整的 Windows 服务器集成等。
  • Java 控制台安全设置中没有中等选项,因为我使用的是 java 8.0.31。
  • 简单的测试应用程序,只有静态 main void,它会向命令行打印一条消息。无法让它工作...

我开始发疯了,无法使用 webstart 开发任何东西,我能看到的唯一选择是购买本地开发证书或完全放弃 webstart...

How I added the certifacte to my machine - 证书显示在我的 Java 控制台中。

这是我无法工作的简单场景:

package com.cbprogramming;

import javafx.application.Application;
import javafx.stage.Stage;

public class Main extends Application {
    @Override
    public void start(Stage primaryStage) throws Exception {
        System.out.println("Test");
    }


    public static void main(String[] args) {
        launch(args);
    }
}

然后,我使用 IntelliJ Idea 创建了一个 JavaFX 应用程序,将其打包,包括 webstart jar 文件、JNLP 文件和 html 网页,包括用于权限的自定义清单字段:沙箱和代码库。

JNLP 文件,我还尝试了安全和权限标签,包括所有权限和沙盒。

<?xml version="1.0" encoding="utf-8"?>
<jnlp spec="1.0" xmlns:jfx="http://javafx.com" href="WebstartTest.jnlp">
  <information>
    <title>Webstart Test</title>
    <vendor>Testing</vendor>
    <description>A Java Webstart testing app</description>
    <offline-allowed/>
  </information>
  <resources>
    <jfx:javafx-runtime version="8.0+" href="http://javadl.sun.com/webapps/download/GetFile/javafx-latest/windows-i586/javafx2.jnlp"/>
  </resources>
  <resources>
    <j2se version="1.6+" href="http://java.sun.com/products/autodl/j2se"/>
    <jar href="WebstartTest.jar" size="1190" download="eager" />
  </resources>
<security>
  <all-permissions/>
</security>
  <applet-desc  width="600" height="400" main-class="com.javafx.main.NoJavaFXFallback"  name="WebstartTest" >
    <param name="requiredFXVersion" value="8.0+"/>
  </applet-desc>
  <jfx:javafx-desc  width="600" height="400" main-class="com.test.Main"  name="WebstartTest" />
  <update check="background"/>
</jnlp>

还有清单文件:

Manifest-Version: 1.0
permissions: sandbox
codebase: file:///d:/test/
JavaFX-Version: 8.0
Class-Path: 
Created-By: JavaFX Packager
Main-Class: com.test.Main

Name: com/test/Main.class
SHA-256-Digest: 8BK5m/ojirCK/QEx8Oe+9z/L6P8JXin0CMDK4R2mkAI=

我已将 jnlp、jar 和 html 文件添加到例外列表中,我已尝试使用 file:// 和 file:///,我还尝试将 glassfhish URL 添加到例外列表中,http和 https...

我正在使用 Jdk 8.0.31 在 Win 8.1 pro 机器上进行开发。

我读过的每个论坛的用户都说这些选项中的任何一个都可以解决他们的问题。我做错了什么?!? 8.0.31 坏了吗?还是 webstart 不值得使用?

【问题讨论】:

  • 可能是错的,但我认为 WebStart 输出到 Java 控制台,而不是命令行,你检查控制台了吗?您不需要购买证书进行本地开发,自签名证书就可以了。官方trouble shooting guide。 WebStart 可以工作,但很繁琐。您可能希望改用self-contained app
  • Java installation verification page 对您有用吗?完成故障排除指南后,编辑您的帖子并根据您的发现进行更新。
  • 是的,验证有效 - 我还阅读了故障排除指南,没有发现任何问题。自包含包是一种选择,但正在放弃 webstart。感谢您的建议。
  • 告诉我们您尝试运行 jnlp 文件时遇到的错误消息。
  • 基本:异常:您的安全设置已阻止自签名沙盒应用程序运行。 ExitException[0]com.sun.deploy.security.BlockedException:您的安全设置已阻止自签名沙盒应用程序运行

标签: java security deployment glassfish java-web-start


【解决方案1】:

这是我发现的,以防其他人觉得它有用。

在使用 Java 7 update 25 或更高版本(当前为 8.0.31)时,Glassfish 4.1 似乎存在 webstart 错误。解决方法是使用旧版本的 Java。

  • 我永远无法让 Java 控制台异常列表正常工作。
  • 将证书添加为受信任让 webstart 从本地文件/html 文件运行,但仍无法通过 glassfish 运行。
  • 标签需要从 jnlp 文件中删除,因为它们在 jar 清单文件中或应用程序被阻止,这些标签由 glassfish 和 intellij JavaFX 打包程序自动添加。
  • 另一种想法是设置本地证书颁发机构并通过 Java 控制台将其添加为受信任 - 这样它就不是自签名证书。

另外,要在 IntelliJ 中调试 glassfish 应用程序客户端:

  • 创建批处理文件:start "name" cmd /c "&lt;installdir&gt;\glassfish\bin\appclient.bat -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005 -client &lt;dir&gt;\TEMPSClient.jar"
  • 创建远程调试配置并将其设置为使用启动前部分中的外部工具运行创建的脚本。

这使用默认端口等进行远程调试,并将在 glassfish 客户端容器中运行应用程序 jar,然后将调试器附加到它。要获取控制台输出,请将 stdout 和 stderr 重定向到日志文件,并将日志文件附加到远程调试配置中。

我第一次尝试使用嵌入式 ACC,但无法正常工作(从文档复制/粘贴具有甚至不存在的功能......)。如果有人知道使用嵌入式 ACC 的好教程,那就太好了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-22
    • 2021-05-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多