2010-08-17 126 views
13

Java Web Start的(JWS)表示,由于jar文件是无符号它无法启动我的应用程序:为什么Java Web Start说签名的jar文件是未签名的?

Error: Unsigned application requesting unrestricted access to system 
     Unsigned resource: .../dynaccn.jar 

但jar文件签署:

$ jarsigner -keystore ... dynaccn.jar idv 
$ jar tf dynaccn.jar 
META-INF/MANIFEST.MF 
META-INF/IDV.SF 
META-INF/IDV.RSA 
META-INF/ 
edu/ 
edu/ucar/ 
edu/ucar/unidata/ 
edu/ucar/unidata/dynaccn/ 
App$1.class 
... 
$ jarsigner -verbose -certs -verify dynaccn.jar 
     28325 Tue Aug 17 09:41:58 MDT 2010 META-INF/MANIFEST.MF 
     28404 Tue Aug 17 09:41:58 MDT 2010 META-INF/IDV.SF 
     2880 Tue Aug 17 09:41:58 MDT 2010 META-INF/IDV.RSA 
      0 Tue Aug 17 09:41:58 MDT 2010 META-INF/ 
      0 Mon Aug 16 10:10:34 MDT 2010 edu/ 
      0 Mon Aug 16 10:10:34 MDT 2010 edu/ucar/ 
      0 Mon Aug 16 10:10:34 MDT 2010 edu/ucar/unidata/ 
      0 Mon Aug 16 10:10:34 MDT 2010 edu/ucar/unidata/dynaccn/ 
... 
sm  486 Mon Aug 16 10:10:34 MDT 2010 App$1.class 

     X.509, CN=University Corporation for Atmospheric Research, OU=UNIDATA, O=University Corporation for Atmospheric Research, L=Boulder, ST=Colorado, C=US 
     [certificate will expire on 2/6/11 4:59 PM] 
     X.509, CN=Thawte Code Signing CA, O=Thawte Consulting (Pty) Ltd., C=ZA 
     [certificate is valid from 8/5/03 6:00 PM to 8/5/13 5:59 PM] 
     [KeyUsage extension does not support code signing] 
     X.509, [email protected], CN=Thawte Premium Server CA, OU=Certification Services Division, O=Thawte Consulting cc, L=Cape Town, ST=Western Cape, C=ZA 
     [certificate is valid from 7/31/96 6:00 PM to 12/31/20 4:59 PM] 
     [CertPath not validated: null] 
... 
jar verified. 

Warning: 
This jar contains entries whose signer certificate's KeyUsage extension doesn't allow code signing. 
This jar contains entries whose signer certificate will expire within six months. 
This jar contains entries whose certificate chain is not validated. 
This jar contains signed entries that's not signed by alias in this keystore. 

和两个JWS并且我的浏览器拥有“Thawte Premium Server CA”的证书。

即使JWS缓存和浏览器下载区为空,也会出现此问题。

我不相信“KeyUsage”消息是相关的,因为1)相同的证书链用于其他成功启动的应用程序;和2)我读过的文档表明,Thawte代码签名CA仅用于验证UNIDATA证书而不是签署代码。

我的环境是Linux 2.6.27.41-170.2.117.fc10.x86_64,Firefox 3.6.8(i686)和Java 1.7.0-ea。

为什么不启动此应用程序?

更新:如果JNLP文件中的“codebase”属性引用了本地目录,但没有引用位于用户身份验证后面的URL,我发现应用程序将启动。在后一种情况下,如果从命令行调用,javaws(1)将认证网页解释为JNLP文件(具有明显的结果)。如果由用户认证网页中的“deployJava”脚本调用(以便浏览器具有会话cookie),则javaws(1)表示该应用程序未被签名。我发现这两种失败模式都很奇怪,因为javaws(1)文档说明它理解用户认证网页并且jar文件已签名。

+1

你如何签署你的jar文件? 我在使用lazy属性设置为true的ant中的signjar任务时遇到过这些问题。删除'lazy = true'属性几乎使问题消失。 – Pram 2010-08-17 18:51:35

+0

@Pram我使用这个ant(1)条目:。不使用“懒惰”属性。 – 2010-08-17 19:29:43

回答

3

我在Gentoo Linux上运行OpenJDK 7,我想我遇到了同样的问题。

我无法让它与OpenJDK 7一起使用。只有使用Sun Java 6 JDK发行版重新签名最终才能正确签署应用程序。 (由于它由蚂蚁管理,我也重新构建了它,但我不知道这是否是必要的)。

仅在没有重建的情况下切换到官方JDK 6时,仅在使用“jarsigner -verify -verbose -certs”进行变化消失时发出“[CertPath not validated:null]”警告,但看起来不适用于应用程序I最终使用。

2
  1. 确保您没有使用jar的缓存(未签名)版本。清理临时文件夹中JWS downloads jars
  2. 确保所有依赖你的罐子(罐),需要特殊的权限,也签署
+0

即使JWS缓存为空,也会出现此问题。只有一个jar文件,它只包含类。 – 2010-08-17 18:40:43

0

确保您有一个doPrivileged的块包裹您的通话中的applet。我不确定它为什么像这样工作,但似乎像魅力一样工作。

+0

该应用程序是独立的:它不是一个小程序。 – 2010-11-12 22:39:06