8

我正在使用 Sun 的 keytool 创建一个 Bouncy castle 密钥库并将证书导入其中。keytool 确实会生成 Bouncy castle 格式的密钥库。

然后我尝试将 Bouncy castle 密钥库导入 Android 程序。我能够获得“BKS”密钥库的一个实例,但在密钥库上调用 load 会抛出

"java.io.IOException: Wrong version of key store".

这是代码

KeyStore keyStore = KeyStore.getInstance("BKS");
InputStream is = new FileInputStream("/mnt/sdcard/ArcGIS/mystore.bks");
keyStore.load(is, "abcdef".toCharArray());

我尝试了从http://www.bouncycastle.org/latest_releases.html下载的各种版本的 Bouncy castle JAR

我究竟做错了什么?

谢谢,兰吉特

4

3 回答 3

22

在尝试打开使用最新的 BouncyCastle 库生成的密钥库时,Android 4.0.3(API 版本 15)附带的 BouncyCastle 版本似乎失败了。当我使用 创建密钥库时bcprov-jdk15on-147.jar,我的示例 Android 应用程序失败并出现java.io.IOException: Wrong version of key store错误。

但是,如果密钥库是使用bcprov-jdk16-146.jar库创建的,那么它可以由应用程序加载。我的解决方案是使用这个旧库创建密钥库。

据推测,旧 API 版本也是如此;在创建密钥库时尝试旧版本的 BouncyCastle。

于 2012-05-30T02:04:06.547 回答
4

解决。keytool 命令缺少“-storetype BKS”参数,因此虽然生成了 BKS 密钥库文件,但它可能无效。

于 2011-03-03T22:39:02.350 回答
1

这个问题是由于您的 BKS 证书密码长度,它必须小于或等于 7 个字符。这是美国政策和美国出口管制的问题(不是由于技术原因)。

使用 7 个字符的长度重新导出您的证书,它将起作用。

希望能帮助到你

于 2012-09-21T10:32:59.427 回答