当前位置: 首页 > 知识库问答 >
问题:

android调用时密钥库版本错误

罗韬
2023-03-14

我想发出https请求。

我使用bouncyCastle生成密钥库,如下所示:

keytool -importcert -trustcacerts -alias ludevCA -file lu_dev_cert.crt -keypass mypass -keystore keystore.bks -storepass mypass -storetype BKS -providerclass org.bouncycastle.jce.provider.BouncyCastleProvider -providerpath bcprov-jdk15on-146.jar  

并且keylist命令返回正确的值。

但是当我这么做的时候:

KeyStore ks = KeyStore.getInstance("BKS");
InputStream in = getResources().openRawResource(R.raw.keystore);  
ks.load(in, "mypass".toCharArray());

我有一个错误:

wrong version of keystore

我尝试使用几个版本的bouncycast,但结果是一样的。我还尝试定义keysize 1024,但没有任何更改。

有什么想法吗?

共有3个答案

秦雅逸
2023-03-14

最后,我在Windows下使用了一个图形编辑器(KeyStore Explorer),它可以正常工作。

也许错误是由Java /Mac版本问题引起的

满俊楠
2023-03-14

您需要将密钥库的类型从BKS更改为BKS-v1(BKS-v1是BKS的旧版本)。因为BKS版本如这里所说发生了变化

还有另一种解决方案,这要容易得多:

  1. 使用Portecle:
  • 下载Porteclehttp://portecle.sourceforge.net/
  • 用密码和端口打开您的bks文件
  • Do工具

新文件将用BKS-v1编码,不再显示错误。要更改密钥库类型,请打开密钥库资源管理器并转到工具-

注意:
Android可以使用不同的BKS版本:例如,API 15需要BKS-1,而API 23需要BKS,因此您可能需要将这两个文件都放在应用程序中。

您可以使用此代码根据API级别在它们之间切换:

int bks_version;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
    bks_version = R.raw.publickey; //The BKS file
} else {
    bks_version = R.raw.publickey_v1; //The BKS (v-1) file
}
KeyStore ks = KeyStore.getInstance("BKS");
InputStream in = getResources().openRawResource(bks_version);  
ks.load(in, "mypass".toCharArray());
阴元青
2023-03-14

看看Android:信任SSL证书

  -storetype BKS
  -provider org.bouncycastle.jce.provider.BouncyCastleProvider
  -providerpath /path/to/bouncycastle.jar

并在创建密钥库时使用此版本:此处找到版本1.46

愿它能帮助。。。

 类似资料:
  • 我计划在key vault上保留密钥,但我不清楚密钥和秘密的版本控制,我有一些关于Azure key vault上的key/Secret的版本控制的问题。 如何创建现有密钥的新版本? 是否可以解密用不同版本的相同密钥加密的数据? 是否可以为某个版本的密钥设置过期日期?

  • 我在使用SSL时遇到了困难,因为我得到了以下与我的密钥存储相关的错误(使用keytool per:http://developer.android.com/tools/publishing/app-signing.html自创建和自签名): 08-14 20:55:23.044:W/System.err(5430):java.io.ioException:密钥存储的版本错误。08-14 20:55

  • 我试图为某些设备生成密钥时出错。我能够在运行4.4.2的三星Galaxy Note上重现错误。 我创建了一个小应用程序,只能通过从Android开发者页面“生成新私钥”下的https://developer.android.com/training/articles/keystore.html逐行复制代码来生成密钥 错误似乎发生在kpg.generateKeyPair(),在Android Key

  • Android Studio是否签署调试版本?如果是的话,它用来做这件事的密钥库在哪里?

  • 我必须连接到一个基于REST的WebService。 (https://someurl.com/api/lookup/jobfunction/lang/en) 在IE或chrome浏览器中,当我尝试访问这个URL时,我会得到一个证书,我必须信任它并接受它才能继续,然后我必须输入用户名和密码,然后我会得到JSON响应。 同样的事情,我必须为一个android应用程序编程。 > 尝试使用自定义Easy

  • 我有一个现有的密钥库,里面有一个密码,还有几个不同密码的密钥,供我导出并上传到Google Play的不同应用程序使用。 现在,我最近导入了一个应用程序的项目,对它做了一些重大的修改,我正在尝试使用相同的密钥库和选择相同的别名/密码来导出它,就像我最初创建它时一样。 问题是,在我选择密钥别名并输入密钥密码的步骤之后,我看到“错误:无法恢复密钥”。 我怀疑我可能输入了一个错误的密钥密码(注意密钥库密