Gin*_*ray 18 java bouncycastle
我正在尝试将BouncyCastle添加为Windows XP Pro上的安全提供程序,因此我可以使用它根据此处的说明向Android应用程序添加一些证书.不幸的是我不能让它添加提供者.
我有:
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是顺序中的下一个int).当我跑:
keytool -import -v -trustcacerts -alias 0 -file mycert.crt -keystore mystore.bks -storetype BKS -providerName org.bouncycastle.jce.provider.BouncyCastleProvider -storepass mypassword
Run Code Online (Sandbox Code Playgroud)
我收到以下错误消息:
keytool error: java.lang.ClassNotFoundException: org.bouncycastle.jce.provider.BouncyCastleProvider
Run Code Online (Sandbox Code Playgroud)
我也试过动态添加它:
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);
}
}
}
Run Code Online (Sandbox Code Playgroud)
起初我在编译java类时遇到了访问错误,但是根据这里的建议将其更改为警告.现在,当我运行代码时,它会在提供程序列表中显示BouncyCastle,但在程序完成后它不会停留.
我敢肯定它一定是可行的,但我对如何让这个人安装足够长时间来运行keytool使用它感到困扰.是否可以通过Java API运行keytool,或者是否有一些我错过的步骤会让提供商坚持下去?
谢谢!
eri*_*son 25
该-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的情况并不少见.