Webstart 安全是不可能的。尝试与 glassfhish 4 一起使用

Webstart Security is Impossible. Trying to use with glassfhish 4

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

我已经尝试让这个工作 3 天了,研究了我能找到的每一种方法,但无论我尝试什么,webstart 都被阻止了。

使用 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 不值得使用?

以下是我发现的内容,以防其他人觉得有用。

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

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

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

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

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

我首先尝试使用嵌入式 ACC,但无法正常工作(文档中的 copy/paste 具有甚至不存在的功能...)。如果有人知道使用嵌入式 ACC 的好教程,那就太好了。