【问题标题】:BouncyCastle Cryptography provider library used with applet on Java 7u40BouncyCastle Cryptography 提供程序库与 Java 7u40 上的小程序一起使用
【发布时间】:2015-12-08 20:40:16
【问题描述】:

案例:我正在维护一个使用 BouncyCastle 库 bcpkix-jdk15on-149.jarbcprov-jdk15on-149.jar 的 Java 小程序。。 p>

问题在于小程序在支持 JRE 版本 7_u40 的浏览器上运行。
该行为已从版本 7_u25 更改为它始终提示一个模式窗口,例如“使用自签名证书的应用程序的安全提示”(不能再永久隐藏),只是为了信任 bcprov.

https://www.java.com/en/download/help/appsecuritydialogs.xml

据我所知,这是因为 BC 库使用由“JCE 代码签名 CA”颁发的 BouncyCastle 证书进行签名。 因此,该库可以执行和充当密码提供程序。

但是:JRE 无法构建证书链来信任签名。它显示“提供者:未知”

我知道我可以删除该签名并自己签名(我拥有 Thawte 代码签名证书):

  • 它适用于 bcpkix 库
  • 它不适用于 bcprov,因为它不会被视为有效的加密提供程序(JRE 不会信任它)。

我说的对吗? 我该怎么办?
PS:我搜索了很多以找到 JCA 根证书(将其放入 JRE 信任库),但没有成功...有没有办法获取该根 CA?

【问题讨论】:

  • 有人告诉我用我自己的证书第二次签署 bcprov 库(已经由 BC 签署)。问题是使用“jarsigner”验证结果失败。所以,如果有人知道如何在 JAR 文件上添加另一个签名,请告诉我

标签: applet code-signing bouncycastle jarsigner


【解决方案1】:

经过大量搜索并在 BC 邮件列表中发布了一些帖子......我找到了解决方案,因此我将其放在这里以供其他可能面临该问题的人使用:

解决方案基本上是用我自己的证书第二次签署BC库。
JAR 需要 JCA 签名才能被信任为加密提供者,所以不要删除它。
JAR 还需要(另外)一个代码签名,以便能够在 JVM(受 JRE 信任)中运行。

最后一件事,签名技术发生了一些不兼容:

  • BC lib 使用 SHA1 摘要算法签名
  • jarsigner(在我的电脑上)默认使用 SHA256 摘要算法进行签名,导致验证失败。
  • 所以我不得不让 jarsigner 以 SHA1 方式进行操作。 (出于某种原因,从这个角度来看,两个签名必须是一致的)

这是 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

【讨论】:

  • 你是男人中的神
  • 我的小程序是一个 jar 文件,其中包括来自包括赏金城堡在内的所有其他 jar 的类,我收到此异常原因:java.io.IOException:构造 MAC 时出错:java.lang.SecurityException: JCE 无法对提供者 BC 进行身份验证,请建议当我的 applet jar 中的 bc 类位于时如何使用 jarsigner?
  • 只是评论,在我的系统(Ubuntu 14.04 64 位,OpenJDK 7)上使用 bcprov-jdk15on v1.56,我必须使用 -digestalg SHA-256 对其进行签名才能成功验证。
  • @ixM :感谢您提供的信息!这可能是因为较新版本的 bcprov 库现在使用 SHA-256 签名。那篇文章与 bcprov 的旧版本 1.49(现在很漂亮)有关
  • 我可以确认它在 Java 8u151 中仍然有效。谢谢你,拯救了我的一天!
【解决方案2】:

我们还可以包含其他 stackoverflow 帖子和对我有帮助的答案:

放线: Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider());

帮助我摆脱了异常。

来源: jce cannot authenticate the provider bc

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-10-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多