gpt4 book ai didi

java - 在 Webstart/JNLP 中部署 JavaFX

转载 作者:行者123 更新时间:2023-11-30 08:01:36 28 4
gpt4 key购买 nike

我刚刚从 Comodo 购买了代码签名证书。我现在尝试对 Webstart/JNLP 文件进行签名,以便可以分发它,但收到“应用程序被 Java 安全性阻止”消息。 enter image description here

我使用 Maven 来构建:

   <plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-antrun-plugin</artifactId>
<version>1.8</version>
<executions>
<execution>
<phase>package</phase>
<configuration>
<target>
<taskdef name="jfxdeploy" classname="com.sun.javafx.tools.ant.DeployFXTask" classpathref="maven.plugin.classpath" />
<taskdef name="jfxsignjar" classname="com.sun.javafx.tools.ant.FXSignJarTask" classpathref="maven.plugin.classpath" />

<jfxdeploy outdir="${project.build.directory}/jnlp"
outfile="jnlp-test"
embedJNLP="true">

<info title="JNLP Test"
vendor="Foo Bar"
description=""/>
<application name="${project.name}"
mainClass="com.foo.CheckboxTableExample" />
<resources>
<fileset dir="${project.build.directory}" includes="*.jar" />
</resources>

<permissions elevated="true"/>

</jfxdeploy>

<!-- Sign all the jars in the deploy directory -->
<jfxsignjar destdir="${project.build.directory}/jnlp"
keyStore="cert.pfx"
storetype="pkcs12"
storePass="****"
alias="myalias">
<fileset dir="${project.build.directory}/jnlp" includes="*.jar" />
</jfxsignjar>

</target>
</configuration>
<goals>
<goal>run</goal>
</goals>
</execution>
</executions>

<dependencies>
<dependency>
<groupId>com.oracle</groupId>
<artifactId>ant-javafx</artifactId>
<version>8.0</version>
<systemPath>${java.home}/../lib/ant-javafx.jar</systemPath>
<scope>system</scope>
</dependency>
</dependencies>
</plugin>

Maven 编译正常,没有错误,并且通过查看 jar 中的 SIGNATURES.BSF 文件,我可以看到该 jar 已签名。但我很困惑为什么我仍然收到此错误。

我还清除了 Java 中的缓存/临时文件设置,以确保它没有引用旧版本。

有人能解释一下吗?

编辑:

我的 JNLP 输出是:

<?xml version="1.0" encoding="utf-8"?>
<jnlp spec="1.0" xmlns:jfx="http://javafx.com" href="jnlp-test.jnlp">
<information>
<title>JNLP Test</title>
<vendor>Foo Bar</vendor>
<description></description>
<offline-allowed/>
</information>
<resources>
<j2se version="1.6+" href="http://java.sun.com/products/autodl/j2se"/>
<jar href="test-jnlp-1.0.jar" size="6834" download="eager" />
</resources>
<security>
<all-permissions/>
</security>
<jfx:javafx-desc width="0" height="0" main-class="com.foo.CheckboxTableExample" name="Test JNLP" />
<update check="background"/>
</jnlp>

JaNeLA 的输出清楚地表明我有一些错误:

Content type application/xml does not equal expected type of application/x-java-jnlp-file
cvc-complex-type.2.4.a: Invalid content was found starting with element 'security'. One of '{resources, application-desc, applet-desc, component-desc, installer-desc}' is expected.
cvc-complex-type.2.4.a: Invalid content was found starting with element 'security'. One of '{resources, application-desc, applet-desc, component-desc, installer-desc}' is expected.
XML encoding not known, but declared as utf-8
Codebase not specified. Defaulting to file:/D:/workspace/test-jnlp/target/jnlp/
Resource 'test-jnlp-1.0.jar' declared as size '6834' but is actually '10571'.
The resource download at test-jnlp-1.0.jar can be optimized by removing the (default) value of download='eager'.
The resource download at test-jnlp-1.0.jar can be optimized by removing the (default) value of main='false'.
It might be possible to optimize the start-up of the app. by specifying download='lazy' for the test-jnlp-1.0.jar resource.
Lazy downloads might not work as expected for test-jnlp-1.0.jar unless the download 'part' is specified.

最后,显然我的 jar 没有根据 jarsign -verify 命令进行签名

jar is unsigned. (signatures missing or not parsable)

我不确定 jfxsigner 命令有什么问题。

编辑 2:现在我知道 jar 签名不起作用,我尝试在命令行上使用 jarsigner 手动执行此操作,并收到有关我颁发的证书的错误

Warning:
The signer's certificate chain is not validated.
No -tsa or -tsacert is provided and this jar is not timestamped. Without a timestamp, users may not be able to validate this jar after the signer certificate's expiration date (2016-08-03) or after any future revocation date.

所以这是我需要向 Comodo 提出的一个问题。

最佳答案

我已经解决了我的问题。

第一个问题是我在 Windows 中拥有 Comodo 的盗贼根证书。需要将其删除并安装正确的。

第二个问题是我需要将 pfx 文件和证书导入 keystore 。我实际上不确定这是否必要,但我在一系列事件中做到了这一点。

第三个问题是“No -tsa”错误。我认为这是 Comodo 给我的证书的问题,他们没有说别的。但通过搜索我发现添加 -tsa http://timestamp.digicert.com到 jarsigner 摆脱了这个警告。

第四个问题是 jxsignjar 不起作用。首先,当 jar 签名失败时,它没有报告错误。接下来,我需要在部署之前放置signjar(我的错误)。最后,它不允许使用 -tsa 选项。我最终使用 ant 任务来签署 jar。

我使用 JaNeLA 工具检查 jnlp 文件。它是一个很酷的工具,但我认为它没有更新以支持 JavaFX。例如,它在

上标记错误
<jfx:javafx-desc  width="0" height="0" main-class="com.foo.CheckboxTableExample"  name="Test JNLP" />

它想要旧格式的东西,例如

<application-desc main-class="com.foo.CheckboxTableExample" />

感谢您的帮助安德鲁。现在我需要弄清楚 Webstart 是否比安装程序更好。

关于java - 在 Webstart/JNLP 中部署 JavaFX,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31844959/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com