我在使用 SSL 时遇到问题,因为我收到以下与我的密钥库相关的错误(使用 keytool 自创建和自签名: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:23.060: W/System.err(5430): 在 org.bouncycastle.jce.provider.JDKKeyStore.engineLoad(JDKKeyStore.java:812) ...
类中抛出的错误JDKKeyStore.java
出现在以下代码中:
来自 JDKKeyStore.java 的块引用:
if (version != STORE_VERSION) { if (version != 0) { throw new IOException("Wrong version of key store."); } }块引用
在这种情况下,STORE_VERSION = 1,我的版本 = 3,基于读取我创建的密钥库所持有的证书的详细信息。我不知道如何生成包含 version=1 证书的密钥库。
我发现这个答案很有帮助: 执行 https 调用时错误的版本密钥库
但是它要求使用以下参数创建密钥库:
-storetype BKS
-provider org.bouncycastle.jce.provider.BouncyCastleProvider -providerpath
/path/to/bouncycastle.jar
但是,当我尝试使用以下参数创建 keytool(使用 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 /用户/djames/dropbox/bc146keystore/
(其中 /Users/djames/dropbox/bc146keystore/ 是充气城堡 jar 的路径:bcprov-jdk16-146.jar)
我收到以下错误:
keytool 错误:java.lang.RuntimeException:使用错误,?providerpath 不是合法命令 java.lang.RuntimeException:使用错误,?providerpath 不是 sun.security.tools.KeyTool.parseArgs 的合法命令(KeyTool.java: 375) 在 sun.security.tools.KeyTool.run(KeyTool.java:171) 在 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 option
. 为什么不一致?(如果我不使用 -providerpath 选项,那么我会在该选项处得到一个未知的类异常:"-providerclass org.bouncycastle.jce.provider.BouncyCastleProvider"
...)
当我谷歌:keytool -providerpath
我没有得到任何帮助来解决这个问题。
我不确定如何在不解决我的 keytool 问题的情况下解决我的密钥库版本问题。任何建议表示赞赏。
吉姆
(Mac OSX 10.6.8 if relevant)