java.security.NoSuchProviderException:JCE无法在servelet中验证提供程序BC

时间:2013-10-31 16:05:00

标签: java diffie-hellman

我正在使用充气城堡实施Elliptic Curve 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 at   javax.crypto.JceSecurity.getInstance(JceSecurity.java:101)at   javax.crypto.KeyAgreement.getInstance(KeyAgreement.java:223)

我将Bouncy城​​堡提供程序添加到JRE中的java.security文件中。但它没有帮助。我想知道这种情况的解决方案。
此问题也只发生在servelet上。我测试了一个J2SE项目,代码工作正常。只有当我把它放在一个servlet中时才会抛出异常。

1 个答案:

答案 0 :(得分: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