BouncyCastle安装问题

我正在尝试将BouncyCastle添加为Windows XP Pro上的安全提供程序,因此我可以使用它根据此处的说明向Android应用程序添加一些证书。 不幸的是我无法让它添加提供者。

我有:

  1. 将提供程序下载到C:\Program Files\Java\jre6\lib\ext\
  2. C:\Program Files\Java\jre6\lib\ext\bcprov-jdk16-146.jar%CLASSPATH%
  3. security.provider.7=org.bouncycastle.jce.provider.BouncyCastleProvider添加到java.security(7是顺序中的下一个int)。

当我跑:

 keytool -import -v -trustcacerts -alias 0 -file mycert.crt -keystore mystore.bks -storetype BKS -providerName org.bouncycastle.jce.provider.BouncyCastleProvider -storepass mypassword 

我收到以下错误消息:

 keytool error: java.lang.ClassNotFoundException: org.bouncycastle.jce.provider.BouncyCastleProvider 

我也试过动态添加它:

 import java.security.Provider; import java.security.Security; import java.util.Enumeration; import org.bouncycastle.jce.provider.BouncyCastleProvider; public class BouncyCastleMain { public static void main(String[] args) throws Exception { Security.addProvider(new BouncyCastleProvider()); // add it try { // list them out Provider p[] = Security.getProviders(); for (int i = 0; i < p.length; i++) { System.out.println(p[i]); for (Enumeration e = p[i].keys(); e.hasMoreElements();) System.out.println("\t" + e.nextElement()); } } catch (Exception e) { System.out.println(e); } } } 

起初我在编译java类时遇到了访问错误,但是根据这里的建议将其更改为警告。 现在,当我运行代码时,它会在提供程序列表中显示BouncyCastle,但在程序完成后它不会停留。

我确信它一定是可行的,但是我对如何安装这个人足够长时间运行keytool使用它感到困扰。 是否可以通过java API运行keytool,或者是否有一些我错过的步骤会让提供商坚持下去?

谢谢!

-providerName选项需要提供程序名称 (在本例中为“BC”),而不是类名 。 另一个选项-providerClass确实需要一个类名,当提供程序未在java.security文件中注册时,它很有用。

当您以“编程方式”注册提供程序时,它只是暂时的。 您的程序必须在每次运行时重新注册其提供程序。 如果您的目标是使BouncyCastle可用于keytool您将无法使用此方法。

由于您已经安装了提供程序(通过将存档放在lib/ext并将其列在java.security ),因此使用-providerName BC选项可能是最简单的解决方案。 或者,您可以使用-providerClass org.bouncycastle.jce.provider.BouncyCastleProvider选项。

顺便说一句,您不应该使用CLASSPATH环境变量。 lib/ext中的库已经在类路径上了。

如果在更正选项后仍然获得NoSuchProviderException (使用-providerName )或ClassNotFoundException (使用-providerClass ),请validation您是否使用了keytool的正确副本。 也就是说,在执行时,指定keytool的完整路径,而不是依赖于PATH变量。 确保路径引用安装了BouncyCastle的JRE。 系统具有多个JRE和JDK并不罕见。

如果您使用的是Windows,请不要忘记以管理员身份启动命令行以输入keytool命令。