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
我收到以下错误消息:
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命令。
- 签署消息并通过Bouncy Castle的恢复消息进行validation
- 使用轻量级API生成Bouncy Castle RSA密钥对
- 如何将.der文件中的私钥加载到java私钥对象中
- 让BouncyCastle解密GPG加密的消息
- PBEWITHSHA256AND128BITAES-CBC-BC在RedHat 6.4上创建java.security.NoSuchAlgorithmException
- 使用Bouncy Castle的C#RSA解密
- 为什么我的密钥标识符不匹配?
- 坏填充exception – pkcs11中的RSA / ECB / OAEPWITHSHA-256ANDMGF1PADDING
- 为什么桌面AES文件IO与Android AES文件IO不兼容?