Android充气城堡:IOException

时间:2011-03-03 04:18:56

标签: android bouncycastle keystore

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

然后我尝试将Bouncy城​​堡密钥库导入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

我做错了什么?

谢谢, 兰吉特

3 个答案:

答案 0 :(得分: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。

答案 1 :(得分:4)

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

答案 2 :(得分:1)

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

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

希望有所帮助