我使用 Netbeans IDE 对我的 jar 进行签名。
我使用受信任的证书签署了我的 jar,并在 Netbeans UI 对话框中输入了密钥库详细信息和密钥别名。
产品版本:NetBeans IDE Dev(构建 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 密钥库,然后运行程序。
但更重要的是,为什么我的程序没有运行?在他们拒绝自签名 jar 之前,它曾经运行良好的 pre-Java 7.21。
更新:
在 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。