【问题标题】:Android bouncy castle: IOExceptionAndroid 充气城堡:IOException
【发布时间】:2011-03-03 04:18:55
【问题描述】:

我正在使用 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下载的各种版本的充气城堡JAR

我做错了什么?

谢谢, 兰吉特

【问题讨论】:

    标签: android bouncycastle keystore


    【解决方案1】:

    在尝试打开使用最新 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 到目前为止,这解决了我的问题.. 但它也让我想到了运行 android 4.2 的设备在更新到 bouncycastle 1.47 时会发生什么(来源:developer.android.com/about/versions/jelly-bean.html
    • 这也是我的问题的解决方案。感谢您提供宝贵的信息。
    • 当我尝试使用 146 库来创建证书时,它告诉我完全相同的“错误的密钥库版本”。如果我使用最新版本,它可以导入。在 Android 设备上,它正好相反。问题是 *.csr 证书来自客户端要求维护它现在的服务器。?有没有我可以使用的选项,而不必在服务器上使用旧版本重新生成 csr 文件?
    【解决方案2】:

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

    【讨论】:

    • 我遇到了同样的问题。但是我使用了参数“-storetype BKS”。您是否尝试过其他任何方法来使其正常工作?
    【解决方案3】:

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

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

    希望对你有帮助

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-04-20
      • 1970-01-01
      • 1970-01-01
      • 2014-09-19
      • 2019-12-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多