我正在尝试将 BouncyCastle 添加为 Windows XP Pro 上的安全提供程序,以便我可以根据说明使用它向 Android 应用程序添加一些证书here http://blog.crazybob.org/2010/02/android-trusting-ssl-certificates.html。不幸的是我无法让它添加提供者。
I've:
- 将提供程序下载到
C:\Program Files\Java\jre6\lib\ext\
.
- Added
C:\Program Files\Java\jre6\lib\ext\bcprov-jdk16-146.jar
to %CLASSPATH%
.
- Added
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类时遇到访问错误,但根据建议将其更改为警告here http://lkamal.blogspot.com/2008/09/eclipse-access-restriction-on-library.html。现在,当我运行代码时,它会在提供程序列表中显示 BouncyCastle,但在程序完成后它不会保留下来。
我确信它一定是可行的,但我对如何让这个家伙安装足够长的时间以使用它运行 keytool 感到困惑。是否可以通过 java API 运行 keytool,或者是否有一些我错过的步骤可以让提供程序继续存在?
Thanks!
The -providerName
选项需要一个提供商名称(在本例中为“BC”),不是班级名称。另一种选择,-providerClass
,确实需要类名,并且当提供者未在java.security
file.
当您“以编程方式”注册提供程序时,这只是暂时的。您的程序每次运行时都必须重新注册其提供者。如果您的目标是让 BouncyCastle 可供使用,您将无法使用此方法keytool
.
由于您已经安装了提供程序(通过将存档放入lib/ext
并将其列出在java.security
), 使用-providerName BC
选项可能是最简单的解决方案。或者,您可以使用-providerClass org.bouncycastle.jce.provider.BouncyCastleProvider
option.
顺便说一下,你不应该使用CLASSPATH
环境变量。图书馆位于lib/ext
已经在类路径上了。
如果在更正选项后,您仍然得到NoSuchProviderException
(using -providerName
) or ClassNotFoundException
(using -providerClass
),验证您使用的是正确的副本keytool
。即执行时指定完整路径keytool
,而不是依赖于你的PATH
多变的。确保该路径引用了安装 BouncyCastle 的 JRE。系统拥有多个 JRE 和 JDK 的情况并不罕见。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)