【问题标题】:java.security.NoSuchProviderException: JCE cannot authenticate the provider BC in serveletsjava.security.NoSuchProviderException:JCE 无法在 servlet 中验证提供者 BC
【发布时间】:2013-10-31 16:04:59
【问题描述】:

我正在使用充气城堡实现椭圆曲线 Diffie Hellman。我正在使用bcprov-jdk15on-149.jar。但是

java.security.NoSuchProviderException:JCE 无法验证 提供者 BC

抛出异常。它发生在以下行KeyAgreement.getInstance("ECDHC", "BC");

KeyAgreement aKeyAgree = null;
try {
     //exception occur here
     aKeyAgree = KeyAgreement.getInstance("ECDHC", "BC");
}

例外是

java.security.NoSuchProviderException:JCE 无法验证 提供者 BC 在 javax.crypto.JceSecurity.getInstance(JceSecurity.java:101) 在 javax.crypto.KeyAgreement.getInstance(KeyAgreement.java:223)

我将 Bouncy castle 提供程序添加到 JRE 中的 java.security 文件中。但这并没有帮助。我想知道这种情况的解决方案。
此外,此问题仅发生在小服务程序中。我用一个 J2SE 项目进行了测试,代码运行良好。仅当我将其放入服务小程序时才会引发异常。

【问题讨论】:

  • jre 没有选择 BouncyCastle 提供商。尝试使用 Security.addProvider(new BouncyCastleProvider()); 手动添加它;
  • 它已经在我的代码中了。
  • 你用的是什么jre版本?
  • @user1516873 它的 jre 1.7

标签: java diffie-hellman


【解决方案1】:

所以,可能的原因:

  1. 您以某种方式重新打包了 bcprovider.jar,例如,使用 maven shade 插件。它使 BC 签名无效。
  2. 您不止一次地添加/删除了 BC 提供程序。例如:How do I get javax.crypto classes such as javax.crypto.Cipher to work on a servlet with jboss?
  3. 您的 jre 安装或某些 jar US_export_policy.jar、local_policy.jar 已损坏或签名无效。尝试与不同的提供商进行一些加密操作来检查这一点。例如,创建 2K RSA 密钥。
  4. 出口 JCE 限制问题:下载并安装 UnlimitedJCEPolicy https://edelivery.oracle.com/otn-pub/java/jce/7/UnlimitedJCEPolicyJDK7.zip

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多