我正在使用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我做错了什么?
谢谢, 兰吉特
答案 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个字符的长度重新导出您的证书,它将起作用。
希望有所帮助