案例:我正在维护一个Java applet,它使用BouncyCastle库 bcpkix-jdk15on-149.jar 和 bcprov-jdk15on-149.jar 。
问题是applet是否在支持JRE版本7_u40的浏览器上运行 行为已从版本7_u25更改为总是提示模式窗口,如“使用自签名证书的应用程序的安全提示”(不能再永久隐藏),只是为了信任 bcprov
https://www.java.com/en/download/help/appsecuritydialogs.xml
据我所知,这是因为BC库是使用由“JCE Code Signing CA”颁发的BouncyCastle证书签名的。 因此,lib可以执行并充当加密提供程序。
但是:JRE无法构建证书链以信任签名。它显示“提供者:UNKNOWN”
我知道我可以删除该签名并自行签名(我拥有Thawte代码签名证书):
我是对的吗?
我该怎么办?
PS:我搜索了很多东西来找到JCA根证书(将它放入JRE信任库),没有成功......有没有办法获取根CA?
答案 0 :(得分:22)
经过大量的搜索和BC邮件列表中的一些帖子....我找到了解决方案,所以我把它放在这里可能面临这个问题的其他人:
解决方案基本上是用我自己的证书第二次签署BC库 JAR需要JCA签名才能被信任为加密提供程序,因此请勿将其删除 JAR还需要(另外)代码签名,以便能够在JVM中运行(由JRE信任)。
最后一件事,签名技术发生了一些不兼容的事情:
这是jarsigner命令的魔术参数,可以添加并实现它: -digestalg SHA1
示例命令:
jarsigner -keystore ./mykeystore.jks -storepass myPass -digestalg SHA1 bcprov-jdk15on-149.jar myAlias
......你已经完成了!
以下帖子给了我提示:What prevents Java from verifying signed jars with multiple signature algorithms
答案 1 :(得分:0)
我们还可以包含其他stackoverflow帖子和帮助我的答案:
放线: Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider());
帮助我摆脱异常。