Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/195.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android &引用;密钥存储的错误版本“;错误。如何创建版本=1的密钥库证书?_Android_Ssl_Keytool_Android Keystore - Fatal编程技术网

Android &引用;密钥存储的错误版本“;错误。如何创建版本=1的密钥库证书?

Android &引用;密钥存储的错误版本“;错误。如何创建版本=1的密钥库证书?,android,ssl,keytool,android-keystore,Android,Ssl,Keytool,Android Keystore,我在使用SSL时遇到问题,因为我遇到了与我的密钥库相关的以下错误(使用keytool per自创建和自签名:): 08-14 20:55:23.044:W/System.err(5430):java.io.IOException:错误 密钥存储的版本。08-14 20:55:23.060:W/系统错误(5430):在 org.bouncycastle.jce.provider.JDKKeyStore.engineLoad(JDKKeyStore.java:812) JDKKeyStore.ja

我在使用SSL时遇到问题,因为我遇到了与我的密钥库相关的以下错误(使用keytool per自创建和自签名:):

08-14 20:55:23.044:W/System.err(5430):java.io.IOException:错误 密钥存储的版本。08-14 20:55:23.060:W/系统错误(5430):在 org.bouncycastle.jce.provider.JDKKeyStore.engineLoad(JDKKeyStore.java:812)

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

大宗报价 来自JDKKeyStore.java:
如果(版本!=存储区版本) { 如果(版本!=0) { 抛出新IOException(“密钥存储的错误版本”); } }

大宗报价

在本例中,STORE_VERSION=1,my VERSION=3是基于读取我创建的密钥库所持有的证书的详细信息。我不知道如何生成包含version=1证书的密钥库

我发现这个答案很有帮助:

但是,它要求使用以下参数创建密钥库:

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

但是,当我尝试使用以下参数创建keytool(使用Mac上的终端应用程序)时:

keytool-genkeypair-v-alias androiddebugkey-keyalg RSA-keysize 2048-有效期10000-密钥传递android-密钥库 /Users/djames/dropbox/bc146keystore/debug.keystore-storepassandroid -providerclass org.bouncycastle.jce.provider.BouncyCastleProvider–providerpath/Users/djames/dropbox/bc146keystore/

(其中/Users/djames/dropbox/bc146keystore/是bouncy castle jar的路径:bcprov-jdk16-146.jar)

我得到以下错误:

keytool错误:java.lang.RuntimeException:使用错误,?providerpath 不是合法命令java.lang.RuntimeException:用法错误, ?providerpath不是当前的合法命令 sun.security.tools.KeyTool.parseArgs(KeyTool.java:375)位于 运行(KeyTool.java:171) main(KeyTool.java:166)

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

-genkeypair[-v][-受保护] [-别名] [-keyalg][-keysize] [-sigalg][-dname] [-有效期][钥匙通行证] [-keystore][-storepass] [-storetype][-providername] [-providerclass[-providerarg]]。。。 [-providerpath]

但是在我使用的Oracle docs java版本6中 ()
它告诉我这些是选项:

-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
我没有得到任何帮助来解决这个问题

我不知道如何在不解决keytool问题的情况下解决密钥库版本问题。如有任何建议,我们将不胜感激

吉姆


版本不匹配是针对密钥存储版本,而不是证书版本(v3 X.509证书的值应为2)


您使用的是哪个版本的JDK
keytool
from?您是否指定了命令的完整路径,或使用了
路径中的内容?您确定使用的是JKS密钥存储库,而不是JCEKS密钥存储库吗?

我使用密钥存储库的版本解决了这个问题。请参阅:

我的问题是使用了太新的bouncy castle版本。我必须使用-任何以后,它给了我这个错误。

为了完成Ryan的回答,我必须深入研究如何使用Bouncy Castle 1.46生成BKS,您可以使用生成BKS

  • 下载
  • 安装或解压缩它
  • 替换Portecle安装目录中的bcprov.jar(例如:
    C:\ProgramFiles(x86)\Portecle\bcprov.jar
    )。需要相同的命名
  • 重新启动Portecle并生成您的BKS信任库
  • 这就解释了


    编辑

    从Portecle1.8开始,您可以使用BKS-V1类型生成信任库,而无需替换
    bcprov.jar


    您可以在单击
    新建密钥库
    后选择它,或通过菜单
    工具->更改密钥库类型
    更改密钥库类型

    来更改类型。非常感谢您的想法。1)不确定如何确切地说出我使用的密钥库版本。我使用的是Java SE runtime Environment=1.6.0_33,可能还有与之配套的相应JDK(因为据我所知,我没有执行任何单独的安装)。基于我的$PATH,我使用的keytool来自以下子目录:System/Library/JavaVM.framework/Versions/A。我不知道为什么它不来自以下子目录:…/JavaVM.framework/Versions/1.6.0子目录……2)我没有指定路径,而是使用了默认路径。如上所述,默认路径将在以下位置找到keytool:System>Library/JavaVM.framework/Versions/A。当我指定路径并运行“System>Library/JavaVM.framework/Versions/1.6.0/keytool-help”时,它将显示与默认keytool相同的显示,例如,-genkeypair包含-providerpath的选项。3)密钥库类型:首先,我使用的是默认的debug.Keystore,它是在使用Eclipse时为android创建的
    (Mac OSX 10.6.8 if relevant)