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

时间:2015-03-01 01:43:14

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

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

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

  • 例外列表。不行。
  • 将证书添加为可信证书。不行。
  • Sandbox不需要任何权限。不行。
  • 更新Java。不行。
  • 我似乎无法找到部署规则集选项,但这听起来像需要完整的Windows服务器集成等。
  • Java控制台安全设置中没有中选项,因为我使用的是java 8.0.31。
  • 简单的测试应用程序除了静态主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不值得使用?

1 个答案:

答案 0 :(得分:0)

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

使用Java 7更新25或更高版本(目前为8.0.31)时,Glassfish 4.1似乎有一个webstart错误。解决方法是使用旧版本的Java。

  • 我永远无法让java控制台例外列表生效。
  • 将证书添加为受信任的让webstart从本地文件/ html文件中工作,但它仍然没有通过glassfish工作。
  • 标签需要从jnlp文件中删除,因为它们位于jar清单文件中或者应用程序被阻止,这些标记由glassfish和intellij JavaFX packager自动添加。
  • 另一个想法是设置本地证书颁发机构并通过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但无法正常工作(从文档复制/粘贴具有甚至不存在的功能......)。如果有人知道使用嵌入式ACC的好教程,那就太棒了。