android - "Wrong version of key store"错误。如何创建 version=1 keystore 证书?

标签 android ssl keytool android-keystore

我在使用 SSL 时遇到问题,因为我收到以下与我的 keystore 相关的错误(使用 keytool 自行创建和自行签名:http://developer.android.com/tools/publishing/app-signing.html):

08-14 20:55:23.044: W/System.err(5430): java.io.IOException: Wrong version of key store. 08-14 20:55:23.060: W/System.err(5430): at org.bouncycastle.jce.provider.JDKKeyStore.engineLoad(JDKKeyStore.java:812) ...

JDKKeyStore.java 类中抛出的错误出现在以下代码中:

Blockquote From JDKKeyStore.java:
if (version != STORE_VERSION) { if (version != 0) { throw new IOException("Wrong version of key store."); } }

Blockquote

在这种情况下,STORE_VERSION = 1,而我的版本 = 3 基于阅读我创建的 keystore 持有的证书的详细信息。我不知道如何生成包含 version=1 证书的 keystore 。

我发现这个答案很有帮助: wrong version keystore when doing https call

但是它需要使用以下参数创建 keystore :

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

但是,当我尝试使用这些参数创建 key 工具(在 Mac 上使用终端应用程序)时:

keytool -genkeypair -v -alias androiddebugkey -keyalg RSA -keysize 2048 -validity 10000 -keypass android -keystore /Users/djames/dropbox/bc146keystore/debug.keystore -storepass android -providerclass org.bouncycastle.jce.provider.BouncyCastleProvider –providerpath /Users/djames/dropbox/bc146keystore/

(其中/Users/djames/dropbox/bc146keystore/是充气城堡 jar 的路径:bcprov-jdk16-146.jar)

我收到以下错误:

keytool error: java.lang.RuntimeException: Usage error, ?providerpath is not a legal command java.lang.RuntimeException: Usage error, ?providerpath is not a legal command at sun.security.tools.KeyTool.parseArgs(KeyTool.java:375) at sun.security.tools.KeyTool.run(KeyTool.java:171) at sun.security.tools.KeyTool.main(KeyTool.java:166)

我不明白这是在告诉我什么。如果我使用:keytool -help,它会告诉我以下是 -genkeypair 选项的有效选项:

-genkeypair [-v] [-protected] [-alias ] [-keyalg ] [-keysize ] [-sigalg ] [-dname ] [-validity ] [-keypass ] [-keystore ] [-storepass ] [-storetype ] [-providername ] [-providerclass [-providerarg ]] ... [-providerpath ]

但是在我使用的 Oracle docs java 版本 6 中 ( http://docs.oracle.com/javase/6/docs/technotes/tools/solaris/keytool.html )
它告诉我这些是选项:

-genkeypair {-alias alias} {-keyalg keyalg} {-keysize keysize} {-sigalg sigalg} [-dname dname] [-keypass keypass] {-validity valDays} {-storetype storetype} {-keystore keystore} [-storepass storepass] {-providerClass provider_class_name {-providerArg provider_arg}} {-v} {-protected} {-Jjavaoption}

不包括 -providerpath 选项。为什么不一致? (如果我不使用 -providerpath 选项,那么我会在选项处得到一个未知的类异常:"-providerclass org.bouncycaSTLe.jce.provider.BouncyCaSTLeProvider"...)

当我谷歌时:keytool -providerpath
我没有得到任何帮助来解决这个问题。

我不确定如何在不解决我的 key 工具问题的情况下解决我的 keystore 版本问题。任何建议表示赞赏。

吉姆

(Mac OSX 10.6.8 if relevant)

最佳答案

我的问题是使用的充气城堡版本太新了。我不得不使用 146 - 稍后它给了我这个错误。

关于android - "Wrong version of key store"错误。如何创建 version=1 keystore 证书?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11963852/

相关文章:

android - 制作 Vcard 时在 Android ICS 中出现错误

java - 获取随机 getmapASync 空指针异常

java - 如何覆盖 Spring Cloud Eureka 默认发现客户端默认 ssl 上下文?

java - keytool -genseckey -alias TDES -keyalg DESede -keysize 128 在 jre/bin 文件夹中有效,但当 keytool.exe 位于其他位置时无效

alias - keytool -list显示p12 keystore 的不同别名,具体取决于您是否提供密码

android进度对话框不显示百分比

ssl - 如何为我的 elasticsearch 设置 ssl?

.net 添加了客户端证书,但仍然收到无效证书

java - 加密后解密不返回原始字节数组?

android - 如何安全地管理外部服务器上的应用内支付交易?