7

我们决定按照这个oracle 指南签署我们的 JNLP 文件。由于我们有不同的 JNLP,我们采用了第二种方法(使用 JNLP 模板签署 JAR 文件)。

这是我们提取到模板中的代码:

<?xml version="1.0" encoding="UTF-8"?>
<jnlp spec="1.0+" codebase="*" href="*">
  <information>
    <title>*</title>
    <vendor>My vendor</vendor>
    <description>My description</description>
    <icon href="splash.jpg" kind="splash" width="700" height="400" size="115258"/>
    <offline-allowed />
    <shortcut>
      <menu submenu="My submenu"/>
    </shortcut>
  </information>

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

  <resources locale="en es ja">
    <j2se version="1.6+" initial-heap-size="128m" max-heap-size="384m" href="http://java.sun.com/products/autodl/j2se"/>
    <jar href="myjar.jar" main="true" download="lazy" part="core" size="*"/>
    <jar href="lib/commons-lang-2.6.jar" download="lazy" part="commons" size="297085"/>
    ...
    <jar href="lib/trident-6.0.jar" download="lazy" part="core" size="114496"/>
    <property name="jnlp.myProperty" value="*"/>
    <property name="log4j.configuration" value="*"/>
  </resources>

  <application-desc main-class="com.mycom.myapp.MyClass">
  </application-desc>
</jnlp>

...这是我们实际使用的 JNLP 之一:

<?xml version="1.0" encoding="UTF-8"?>
<jnlp spec="1.0+" codebase="http://mylocation.mycom.com/jnlp/myapp/" href="myapp.jnlp">
  <information>
    <title>My App - Production version</title>
    <vendor>My vendor</vendor>
    <description>My description</description>
    <icon href="splash.jpg" kind="splash" width="700" height="400" size="115258"/>
    <offline-allowed />
    <shortcut>
      <menu submenu="My submenu"/>
    </shortcut>
  </information>

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

  <resources locale="en es ja">
    <j2se version="1.6+" initial-heap-size="128m" max-heap-size="384m" href="http://java.sun.com/products/autodl/j2se"/>
    <jar href="myjar.jar" main="true" download="lazy" part="core" size="4189501"/>
    <jar href="lib/commons-lang-2.6.jar" download="lazy" part="commons" size="297085"/>
    ...
    <jar href="lib/trident-6.0.jar" download="lazy" part="core" size="114496"/>
    <property name="jnlp.myProperty" value="http://mylocation.mycom.com/jnlp/myapp/MyApp.properties"/>
    <property name="log4j.configuration" value="http://mylocation.mycom.com/jnlp/myapp/log4j.xml"/>
  </resources>

  <application-desc main-class="com.mycom.myapp.MyClass">
  </application-desc>
</jnlp>

请注意,我将通配符(*)用于:

  1. 标签 jnlp 中的 codebase 属性
  2. 标签 jnlp 中的 href 属性
  3. 标题标签内的内容
  4. jar 标记中的属性大小
  5. 两个属性的值

我将模板放在适当的JNLP-INF文件夹中(也使用适当的名称),然后我们签署了 JAR。但是,我们不断收到JNLPSigningException以下消息:

无法验证启动文件的签名。签名版本与下载版本不匹配。

有谁知道我错过了什么?

4

4 回答 4

4

我遇到了同样的问题,但结果证明我src/JNLP-INF/APPLICATION.JNLP的签名文件中包含的.jar文件(用作签名的 jnlp 文件)与标签application.jnlp中定义的 Web 应用程序中使用的文件不同。<applet>一旦我使它们相同,错误就消失了。

在文件中使用签名的 JNLP 文件时要注意.jar,该文件的命名必须JNLP-INF/APPLICATION.JNLP与它用作模板的名称完全相同,以匹配在应用程序中调用的 jnlp:

于 2014-01-22T20:46:07.937 回答
0

I had this problem on Java 1.7.0_45 on a self-signed war, the solution was to remove properties without jnlp. prefix. In your case try removing:

<property name="log4j.configuration" value="http://mylocation.mycom.com/jnlp/myapp/log4j.xml"/>
于 2014-01-23T13:36:50.220 回答
0

我相信它对标签中的通配符不满意。我遇到了这种确切的情况。出于测试目的,我删除了通配符并卡住了另一个值。工作得很好——但这是不可接受的解决方案,因为这是该物业的全部意义所在!

于 2013-10-22T22:38:29.793 回答
0

作为调试提示,我发现从命令行运行 javaws -verbose 和 jnlp 文件的 url 会在“控制台”选项卡中为您提供更多详细信息。

于 2016-06-11T19:54:15.320 回答