运行带有导入cacerts密钥库的可信证书的签名jar时出现Java Web Start错误

时间:2013-10-02 18:40:44

标签: java security netbeans-7 java-web-start jar-signing

我使用Netbeans IDE签署我的罐子。

我使用可信证书签署了我的jar,并在Netbeans UI对话框中输入了密钥库详细信息和密钥别名。

  

产品版本:NetBeans IDE Dev(Build   nbms-and-javadoc-482-on-20130914)Java:1.7.0_25; Java HotSpot(TM)   客户端VM 23.25-b01运行时:Java(TM)SE运行时环境   1.7.0_25-B16


通过单击jnlp文件运行,我得到了一个Keystore异常。 我想知道用户是否应该手动将证书导入Java cacerts密钥库,如此处所述http://docs.oracle.com/javase/tutorial/security/sigcert/index.html#GenCSR

我这样做了并且“将证书添加到密钥库”。 Oracle设置的密码是:changeit。 但是当我双击JNLP文件时,我得到一个弹出“运行时错误。点击查看详细信息”。我没有任何堆栈跟踪。就我所见,Java控制台没有显示任何错误,只有几行“CacheEntry”。

为什么Web Start / JNLP不会做这样的事情,所以糟糕的用户不必乱用keytool?

1)jar文件包含链中的证书。

2)在JNLP文件中有证书条目。

3)当用户点击jnlp文件时,Java会提取证书并将其导入Java密钥库,然后运行程序。

但更重要的是,为什么我的程序不运行?在它们拒绝自签名罐子之前,它曾经运行过良好的Java之前的版本7.21。

更新

在Java控制面板中,我进入了Advanced,并启用了用于调试和记录的跟踪。 在Java控制台中,我看到了

java.lang.SecurityException: invalid SHA1 signature file digest for org/bouncycastle/cert/jcajce/JcaX509CRLHolder.class
    at sun.security.util.SignatureFileVerifier.verifySection(Unknown Source)    
    at sun.security.util.SignatureFileVerifier.processImpl(Unknown Source)
    at sun.security.util.SignatureFileVerifier.process(Unknown Source)
    at java.util.jar.JarVerifier.processEntry(Unknown Source)
    at java.util.jar.JarVerifier.update(Unknown Source) 
    at java.util.jar.JarFile.initializeVerifier(Unknown Source)

我也看到了

ExitException[ 3]com.sun.deploy.net.FailedDownloadException: Unable to load resource: file:/C:/Users/me/Desktop/dist/lib/bcpkix-jdk15on-149.jar
    at sun.plugin2.applet.JNLP2Manager.downloadResources(Unknown Source)
    at sun.plugin2.applet.JNLP2Manager.prepareLaunchFile(Unknown Source)
    at sun.plugin2.applet.JNLP2Manager.loadJarFiles(Unknown Source)
    at sun.plugin2.applet.Plugin2Manager$AppletExecutionRunnable.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)

我确实在那个位置看到了bcpkix-jdk15on-149.jar。

2 个答案:

答案 0 :(得分:0)

我在NetBeans 7.4中进行构建,似乎不允许额外的标志发送给jarsigner。 我找到了这个What prevents Java from verifying signed jars with multiple signature algorithms

使用新闻组项目中的提示, 我解开了三个BC罐中的每一个: “C:\ Program Files(x86)\ Java \ jdk1.7.0_40 \ bin \ jar”xvf * .jar

然后我删除了META-INF文件夹中的签名文件,并将其重新备份: “C:\ Program Files(x86)\ Java \ jdk1.7.0_40 \ bin \ jar”cmf META-INF \ MANIFEST.MF bcpkix-jdk15on-149-mot.jar org

它运行但我很惊讶在Java控制台中看到这个:

缺少Codebase清单属性:file:/ C:/Users/me/Desktop/dist/lib/bcprov-ext-debug-jdk15on-149-mot.jar 安全性:使用CertPath API验证证书链 basic:Plugin2ClassLoader.getPermissions CeilingPolicy allPerms 安全性:JAVAWS AppPolicy请求权限:file:/ C:/ Users / me /Desktop/dist/lib/bcprov-ext-debug-jdk15on-149-mot.jar basic:JNLP2ClassLoader.getPermissions()

基于 http://docs.oracle.com/javase/7/docs/technotes/guides/jweb/no_redeploy.html#permissions

我添加了属性 权限:所有权限 到罐子里

“C:\ Program Files(x86)\ Java \ jdk1.7.0_40 \ bin \ jar”umf manifest.txt bcprov-ext-debug-jdk15on-149-mot.jar

答案 1 :(得分:0)

使用以下常规异常错误升级到Java 7 Update 45后,WebVPN Java插件无法加载 - 'com.sun.deploy.net.JARSigningException:在资源中找到未签名的条目:

条件: 使用Java 7 Update 45的Windows或Mac OSX计算机。

解决方法: 1)在Java控制面板上禁用“在我的计算机上保留临时文件”选项 - >一般 - >设置。这适用于Mac OSX和Windows。

2)将Java降级到版本7 Update 40或更低版本。

https://blogs.oracle.com/java-platform-group/entry/updated_security_baseline_7u45_impacts