我正在尝试将 BouncyCaSTLe 添加为 Windows XP Pro 上的安全提供程序,以便我可以根据说明使用它向 Android 应用程序添加一些证书 here .不幸的是,我无法添加提供商。
我已经:
- 将提供程序下载到
C:\Program Files\Java\jre6\lib\ext\
。 - 将
C:\Program Files\Java\jre6\lib\ext\bcprov-jdk16-146.jar
添加到%CLASSPATH%
。 - 将
security.provider.7=org.bouncycaSTLe.jce.provider.BouncyCaSTLeProvider
添加到 java.security(7 是顺序中的下一个整数)。
当我运行时:
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 类时遇到访问错误,但根据建议将其更改为警告 here .现在,当我运行代码时,它会在提供程序列表中显示 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
),确认您使用的是 keytool
的正确副本。也就是说,在执行时,指定keytool
的完整路径,而不是依赖于您的PATH
变量。确保该路径指向安装了 BouncyCaSTLe 的 JRE。一个系统具有多个 JRE 和 JDK 的情况并不少见。
关于java - BouncyCaSTLe安装问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5914108/