27

我有以下 JNLP 文件:

<jnlp spec="1.0+" codebase="http://****:****" href="tcm2012.jnlp">
  <information>
    <title>TCM 2012</title>
    <vendor>Drift og Performance, *** Servicecenter</vendor>
    <homepage href="http://******"/>
    <description/>
  </information>
  <security>
    <all-permissions/>
  </security>
  <resources>
    <j2se version="1.6+"/>
    <jar href="tcm2012.jar"/>
  </resources>
  <application-desc main-class="com.****.kundeservice.TCMApplication"/>
</jnlp>

现在,当我尝试从网络运行时,我收到以下错误:

Found unsigned entry in resource

有以下例外

com.sun.deploy.net.JARSigningException: Found unsigned entry in resource: http://*****:****/tcm2012.jar
at com.sun.javaws.security.SigningInfo.getCommonCodeSignersForJar(Unknown Source)
at com.sun.javaws.security.SigningInfo.check(Unknown Source)
at com.sun.javaws.security.JNLPSignedResourcesHelper.checkSignedResourcesHelper(Unknown Source)
at com.sun.javaws.security.JNLPSignedResourcesHelper.checkSignedResources(Unknown Source)
at com.sun.javaws.Launcher.prepareResources(Unknown Source)
at com.sun.javaws.Launcher.prepareAllResources(Unknown Source)
at com.sun.javaws.Launcher.prepareToLaunch(Unknown Source)
at com.sun.javaws.Launcher.prepareToLaunch(Unknown Source)
at com.sun.javaws.Launcher.launch(Unknown Source)
at com.sun.javaws.Main.launchApp(Unknown Source)
at com.sun.javaws.Main.continueInSecureThread(Unknown Source)
at com.sun.javaws.Main.access$000(Unknown Source)
at com.sun.javaws.Main$1.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)

有谁知道如何解决这个问题?

4

5 回答 5

24

这对我有用:

转到控制面板/Java。

然后点击“设置”按钮并激活“在我的计算机上保留临时文件”选项。</p>

这很奇怪,但它奏效了!

于 2014-05-26T16:53:26.120 回答
9

如果您使用较新的 Java 版本进行签名,则较旧的 Java 版本也会出现此问题。

  • 使用 1.8u74 和旧版本签名适用于所有版本
  • 使用 1.8u101 和更高版本签名适用于 1.7u80 和更高版本,但不适用于客户端上的旧版本。

符号算法似乎存在不兼容的变化。

于 2016-11-11T15:12:16.837 回答
2

我的应用程序也有类似的问题。

我有一个使用 javaws 部署的 java swing 应用程序:

  • 当我使用 JRE 1.6 运行应用程序时出现异常
  • 当我使用 JRE 1.7 和 JRE 1.8 运行应用程序时,它可以工作

我检查了所有的罐子,MANIFEST.MF 等,一切都很好。最后我发现我使用了一个新的 TSA 端点来签署我的罐子。

从这个资源http://docs.oracle.com/javase/7/docs/technotes/tools/windows/jarsigner.html我读到 为了生成时间戳,jarsigner 使用时间戳协议 (TSP) 与 TSA 通信在 RFC 3161 中定义。成功时,TSA 返回的时间戳令牌与签名一起存储在签名块文件中。

有人可以对这个问题提供更多的见解吗?特别是我不想被迫使用特定的 TSA。为什么 TSA 之间存在这种差异?谢谢

于 2016-03-31T09:48:51.090 回答
0

在我的linux机器(使用 JDK 6 U45)上编译时,我遇到了同样的问题。但是只有当我也尝试使用 Java 6 U45启动签名应用程序时,我才收到此错误。

当我尝试使用较新的Java 版本(例如 Java 8)启动应用程序时,它一直没问题,没有错误消息。

当我使用Windows机器编译项目时(也使用 6 Update 45),当我使用 Java 6 U45 启动时,它也奇怪地工作了。

只是我的 2 美分……干杯!

于 2016-10-27T11:55:10.170 回答
0

我的情况是,小程序在 META-INF 文件夹中确实有未签名的条目。) 解决此问题的一种方法是重新签名。但是在 java 8 中,自签名小程序被降级到与未签名小程序几乎相同的级别。而且这个小程序不需要任何额外的权限。因此,只需取消签名添加到受信任的站点列表就足够了。

于 2016-10-11T22:12:57.630 回答