Fehler "Falsche Version des Schlüsselspeichers". Wie kann ich ein Keystore-Zertifikat der Version 1 erstellen?
Ich habe Probleme bei der Verwendung von SSL, da im Zusammenhang mit meinem Keystore (selbst erstellt und mit keytool per selbst signiert) die folgende Fehlermeldung angezeigt wird:http://developer.android.com/tools/publishing/app-signing.html):
08-14 20: 55: 23.044: W / System.err (5430): java.io.IOException: Falsche Version des Schlüsselspeichers. 08-14 20: 55: 23.060: W / System.err (5430): at org.bouncycastle.jce.provider.JDKKeyStore.engineLoad (JDKKeyStore.java:812) ...
Der Fehler in der geworfenJDKKeyStore.java
Klasse entsteht im folgenden Code:
Blockquote von JDKKeyStore.java:
if (version! = STORE_VERSION) {if (version! = 0) {throw new IOException ("Falsche Version des Schlüsselspeichers."); }}
Blockquote
In diesem Fall ist STORE_VERSION = 1 und meine Version = 3, basierend auf dem Lesen der Details des Zertifikats, das im von mir erstellten Keystore gespeichert ist. Ich weiß nicht, wie ein Keystore mit einem Zertifikat der Version 1 erstellt wird.
Ich fand diese Antwort hilfreich:Keystore der falschen Version beim Ausführen eines https-Aufrufs
Es wird jedoch die Erstellung des Schlüsselspeichers mit den folgenden Parametern verlangt:
-Typ BKS
-provider org.bouncycastle.jce.provider.BouncyCastleProvider
-providerpath /path/to/bouncycastle.jar
Wenn ich jedoch versuche, das Keytool (mit der Terminal-App auf dem Mac) mit diesen Parametern zu erstellen:
keytool -genkeypair -v -alias androiddebugkey -keyalg RSA -keysize 2048 -validity 10000 -keypass android -keystore /Users/djames/dropbox/bc146keystore/debug.keystore -storepass android -providerclass org.bouncypriderpriderprovider.jce / Benutzer / djames / dropbox / bc146keystore /
(wo / Users / djames / dropbox / bc146keystore / ist der Pfad zum Hüpfburgglas: bcprov-jdk16-146.jar)
Ich erhalte folgenden Fehler:
keytool error: java.lang.RuntimeException: Verwendungsfehler,? providerpath ist kein zulässiger Befehl. java.lang.RuntimeException: Verwendungsfehler,? providerpath ist kein zulässiger Befehl. sun.security.tools.KeyTool.parseArgs (KeyTool.java: 375) bei sun.security.tools.KeyTool.run (KeyTool.java:171) bei sun.security.tools.KeyTool.main (KeyTool.java:166)
Ich verstehe nicht, was mir das sagt. Wenn ich: keytool -help verwende, wird mir mitgeteilt, dass die folgenden Optionen für die Option -genkeypair gültig sind:
-genkeypair [-v] [-protected] [-alias] [-keyalg] [-keysize] [-sigalg] [-dname] [-validity] [-keypass] [-keystore] [-storepass] [-storetype] [-providername] [-providerklasse [-providerarg]] ... [-providerpfad]
Aber in den Oracle-Dokumenten Java Version 6, die ich verwende (http://docs.oracle.com/javase/6/docs/technotes/tools/solaris/keytool.html)
es sagt mir, dass dies die Optionen sind:
-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}
das beinhaltet nicht die-providerpath option
. Warum die Uneinigkeit? (Wenn ich die Option -providerpath nicht verwende, wird bei der Option eine unbekannte Klassenausnahme angezeigt:"-providerclass org.bouncycastle.jce.provider.BouncyCastleProvider"
...)
Wenn ich google: keytool -providerpath
Ich bekomme nichts hilfreiches, um das zu lösen.
Ich bin nicht sicher, wie ich das Problem mit der Keystore-Version lösen soll, ohne mein Keytool-Problem zu lösen. Anregungen geschätzt.
Jim
(Mac OSX 10.6.8 if relevant)