繁体   English   中英

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

[英]Java Web Start error when running signed jar with trusted certificates imported into cacerts keystore

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

我使用受信任的证书对jar进行了签名,然后在Netbeans UI对话框中输入了密钥库详细信息和密钥别名。

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


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

我这样做了,并得到了“证书已添加到密钥库”。 Oracle设置的密码为:changeit。 但是,当我双击JNLP文件时,会弹出“运行时错误。单击以获取详细信息”。 我没有任何堆栈跟踪。 据我所知,Java控制台未显示任何错误,仅显示了几行“ CacheEntry”。

为什么Web Start / JNLP不会做这样的事情,以便可怜的用户不必弄乱keytool?

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

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

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

但更重要的是,为什么我的程序没有运行? 在Java 7.21之前版本运行良好之前,他们拒绝了自签名jar。

更新:

在Java控制面板中,我转到“高级”,并启用了用于调试和日志记录的跟踪。 在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。

我正在NetBeans 7.4中进行构建,该构建似乎不允许多余的标志发送到jarsigner。 我发现这阻止了Java使用多种签名算法验证签名罐子

使用新闻组项目中的提示,我解开了三个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组织

它可以运行,但是令我惊讶的是在Java控制台中看到了这一点:

缺少以下代码库的清单属性:文件:/ C:/Users/me/Desktop/dist/lib/bcprov-ext-debug-jdk15on-149-mot.jar安全性:使用CertPath API基础验证证书链:Plugin2ClassLoader.getPermissions CeilingPolicy allPerms安全性:请求以下文件的JAVAWS AppPolicy权限:文件:/ C:/用户/我/Desktop/dist/lib/bcprov-ext-debug-jdk15on-149-mot.jar基本:JNLP2ClassLoader.getPermissions()

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

我向罐子添加了属性Permissions:all-permissions

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

升级到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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM