8

I am having trouble using SSL, as I am getting the following error related to my keystore (self-created and self-signed using keytool per: 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) ...

The error thrown in the JDKKeyStore.java class arises in the following code:

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

Blockquote

In this case STORE_VERSION = 1, and my version=3 based on reading the details of the certificate held by the keystore I have created. I do not know how to generate a keystore containing a version=1 certificate.

I found this answer helpful: wrong version keystore when doing https call

however it calls for creating the keystore using the following parameters:

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

However, when I try to create the keytool (using the terminal app on Mac) using these parameters:

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/

(where /Users/djames/dropbox/bc146keystore/ is the path to the bouncy castle jar: bcprov-jdk16-146.jar)

I get the following error:

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)

I do not understand what this is telling me. If I use: keytool -help it tells me that the following are valid options for the -genkeypair option:

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

But in the Oracle docs java version 6 that I am using (http://docs.oracle.com/javase/6/docs/technotes/tools/solaris/keytool.html)
it tells me that these are the options:

-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}

which does not include the -providerpath option. Why the discordance? (If I do not use the -providerpath option, then I get an unknown class exception at the option: "-providerclass org.bouncycastle.jce.provider.BouncyCastleProvider"...)

When I google: keytool -providerpath
I get nothing helpful to resolve this.

I am not sure how to solve my keystore version problem without solving my keytool problem. Any suggestions appreciated.

Jim

(Mac OSX 10.6.8 if relevant)
4

4 に答える 4

14

私の問題は、あまりにも新しいバージョンの弾力がある城を使用することでした。私は146を使用しなければなりませんでした-それ以降、このエラーが発生しました。

于 2013-04-17T03:07:11.827 に答える
5

キーストアのバージョンでこの問題を乗り越えることができました。参照:BKSキーストアの作成時のkeytoolエラー:providerpathは有効なコマンドではありません

于 2012-08-27T02:18:39.857 に答える
1

バージョンの不一致は、証明書バージョンではなく、キーストアバージョンに対するものです(v3 X.509証明書の場合は値2である必要があります)。

どのバージョンのJDKを使用keytoolしましたか?コマンドへのフルパスを指定しましたか、それともコマンドに含まれていたものを使用しましたPATHか?JCEKSストアではなく、JKSキーストアを使用していることを確認しますか?

于 2012-08-15T03:53:27.783 に答える
0

バウンシーキャッスル1.46でBKSを生成する方法を見つけるために掘り下げなければならなかったので、ライアンの答えを完成させるために、Portecleを使用してBKSを生成することができます。

  1. Boucycastleプロバイダー1.46をダウンロード
  2. インストールまたは解凍します。
  3. Portecleインストールディレクトリのbcprov.jarを置き換えます(例:) C:\Program Files (x86)\Portecle\bcprov.jar。同じ名前が必要です。
  4. Portecleを再起動し、BKSトラストストアを生成します。

これはここで説明されています。


編集

Portecle 1.8以降、BKS-V1タイプを使用して、を置き換えることなくトラストストアを生成できますbcprov.jar

クリックして選択するNew keystoreか、メニューからタイプを変更できますTools -> Change KeyStore Type

于 2015-12-09T10:38:49.427 に答える