如何为Java 8u141签署Java Webstart应用程序?

看起来Oracle已经发生了类似于Java 7u45的更改,其中需要设置新的清单值来运行签名的Java Webstart应用程序(请参阅此处 )。

目前,我们使用Java 8u131签名的应用程序无法启动Java8u141,并显示错误消息Could not verify signing in resource: (arbitrary resource.jar)

您是否仍然可以使用Java 8u141运行已签名的Webstart应用程序,即我是否有特殊问题?

在发行说明中是对安全性更改的说明,但它们与代码签名无关。 加密路线图看起来像这个版本并没有真正改变代码签名,尽管例如Java 8u131,其中删除了MD5支持。 但是Java 8u131对我有用,Maven Java Webstart插件也使用SHA-256-Digest。

我找到了一个解决方案,或者更确切地说是解决问题的方法。 有问题的jar在我们的例子中是commons-httpclient-3.1.jar。 清单包含以下条目

 Name: org/apache/commons/httpclient 

我在最后添加了一个/然后我签署并重新部署了该应用程序。

 Name: org/apache/commons/httpclient/ 

这次Web启动应用程序启动没有任何问题。 在这两种情况下,jar都是用java 8u141签名的,jarsigner可以validationjar,但是webstart没有在第一种情况下启动。 在我看来,这是一个webstart错误。

Java Webstart Application for java 8u141也遇到了同样的问题。 它也包含commons-httpclient-3.1.jar 。 问题恰好在这个jar子里。

看起来validation算法已经改变了。 现在所有清单条目都应该有摘要。 我发现这个原始jar已经包含一个没有摘要的清单条目org / apache / commons / httpclient

 Name: org/apache/commons/httpclient Implementation-Title: org.apache.commons.httpclient Implementation-Version: 3.1 X-Compile-Target-JDK: 1.2 Specification-Vendor: Apache Software Foundation Specification-Title: Jakarta Commons HttpClient Implementation-Vendor-Id: org.apache Extension-name: org.apache.commons.httpclient X-Compile-Source-JDK: 1.2 Specification-Version: 3.1 Implementation-Vendor: Apache Software Foundation 

我通过更改ant jar任务设置来修复问题。 我添加了为’zipfileset’排除.MF文件 (也可能是.SF,.RSA,.DSA文件)。 此外,可能需要更改属性’filesetmanifest’= merge。

它可以防止在最终签名的jar中出现那个清单条目。

有一个影响代码签名的变化:SHA-1证书被禁用。 您链接到的发行说明中提到了这一点。 他们特别提到:

一个名为usage的新约束,在设置时,如果在指定用途的证书链中使用该算法,则会限制该算法。 最初支持三种用法:用于TLS / SSL服务器证书链的TLSClient用于TLS / SSL客户端证书链的SignedJAR ,以及用于签名JAR的证书链的SignedJAR

(强调我的)。 另请注意,发行说明讨论了整个证书链 。 因此,即使您的签名证书使用更新/更强的哈希算法(SHA2等),如果颁发机构的证书使用SHA1,它仍然可以被拒绝。

更多详情:

https://bugs.openjdk.java.net/browse/JDK-8176536

http://openjdk.java.net/jeps/288

我遇到了同样的问题。 我的解决方案是通过修改构建脚本(ant:jar filesOnly =“true”)或使用小的groovy脚本来删除jar中的所有目录条目(因为它们通常无用),以重新打包没有dir条目的jar。

这绝对是一个JWS错误 – 我想知道甲骨文如何忽视这一点,以及它们是否会为此提供快速解决方案……

我遇到了commons-httpclient-3.1.jar,axis-1.4.jar,xml-resolver-1.2.jar,oro-2.0.8.jar的问题。 打开MANIFEST.MF,在名称末尾添加“/”。 重新构建并签署项目,现在它可以工作