2012-08-15 16 views
6

Sto avendo dei problemi utilizzando SSL, come sto ottenendo il seguente errore relativo alla mia chiavi (auto-creato e auto-firmato utilizzando keytool per: http://developer.android.com/tools/publishing/app-signing.html):Errore "Versione errata dell'archivio chiavi". Come posso creare una versione = 1 certificato del keystore?

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) ...

L'errore gettato nella classe JDKKeyStore.java nasce nel codice seguente:

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

Blockquote

in questo caso STORE_VERSION = 1, e la mia versione = 3 sulla base delle leggere i dettagli del certificato posseduto dal chiavi che ho creato. Non so come generare un keystore contenente un certificato version = 1.

ho trovato questa risposta utile: wrong version keystore when doing https call

tuttavia richiede la creazione del keystore utilizzando i seguenti parametri:

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

Tuttavia, quando cerco di creare il keytool (utilizzando l'applicazione terminale Mac) utilizzando questi parametri:

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/

(dove/Users/djames/set/bc146keystore/T ha percorso il barattolo Castello gonfiabile: bcprov-jdk16-146.jar)

ottengo il seguente errore:

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)

Non capisco che cosa questo mi sta dicendo. Se uso: keytool -help mi dice che i seguenti sono opzioni valide per l'opzione -genkeypair:

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

ma nella versione Oracle docs Java 6 che sto usando (http://docs.oracle.com/javase/6/docs/technotes/tools/solaris/keytool.html)
mi dice che queste sono le opzioni:

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

che non include il -providerpath option. Perché la discordanza? (Se non si utilizza l'opzione -providerpath, tanto sono un'eccezione classe sconosciuta a scelta: "-providerclass org.bouncycastle.jce.provider.BouncyCastleProvider" ...)

Quando Google: keytool -providerpath
non ottengo niente utile per risolvere questo.

Non sono sicuro di come risolvere il problema relativo alla versione del keystore senza risolvere il problema del keytool. Ogni suggerimento è apprezzato.

Jim

(Mac OSX 10.6.8 if relevant) 
+0

Questa domanda ha già trovato una risposta qui: http://stackoverflow.com/a/33197845/5459467 – Cukic0d

risposta

1

La versione non corrispondente è per la versione chiavi, non la versione del certificato (che dovrebbe avere il valore 2 per un certificato X.509 v3).

Quale versione del JDK hai utilizzato da keytool? Hai specificato un percorso completo per il comando, o usi quello che c'era nel tuo PATH? Sei sicuro di utilizzare i keystore di JKS e non i negozi JCEKS?

+0

Grazie mille per i tuoi pensieri. – gymshoe

+0

1) non so esattamente come dire la versione di keytool che sto usando. Sto usando Java SE runtime enviroment = 1.6.0_33, e presumibilmente il corrispondente JDK che accompagna (poiché non ho eseguito alcuna installazione separata che io conosca). Sulla base del mio $ PATH, il keytool che sto usando esce dalla seguente sottodirectory: System/Library/JavaVM.framework/Versions/A. Non so perché non provenga dalla sottodirectory: .../JavaVM.framework /Versions/1.6.0 ... – gymshoe

+0

2) Non ho specificato un percorso, ma ho usato l'impostazione predefinita. Come indicato sopra, il percorso predefinito troverebbe keytool in: Sistema> Libreria/JavaVM.framework/Versions/A. Quando faccio specificare un percorso ed eseguo "Sistema> Libreria/JavaVM.framework/Versions/1.6.0/keytool -help" mi mostra la stessa visualizzazione del mio keytool predefinito, ad esempio -genkeypair include l'opzione per -providerpath. – gymshoe

14

Il mio problema era usare una versione di castello gonfiabile che era troppo nuovo. Ho dovuto usare 146 - più tardi e mi ha dato questo errore.

+0

Lo stesso qui, la versione 148 mi dà lo stesso errore, grazie mille! –

+0

Questo funziona, ma sono perplesso sul motivo per cui Eclipse raggruppa una versione (148) che non funziona ... – Michael

+0

versione 147 mi stava dando lo stesso errore. Grazie –

0

Per completare la risposta di Ryan come ho dovuto scavare per scoprire come generare un BKS con Bouncy Castle 1.46, è possibile utilizzare Portecle per generare il BKS.

  1. Scarica Boucycastle Provider 1.46
  2. Installare o decomprimerlo.
  3. Sostituire bcprov.jar nella directory di installazione di Portecle (esempio: C:\Program Files (x86)\Portecle\bcprov.jar). È richiesta la stessa denominazione.
  4. Riavvia Portecle e genera il truststore BKS.

Questo spiegato here.


Edit:

Dal Portecle 1.8, è possibile utilizzare il tipo BKS-V1 per generare il truststore, senza sostituire bcprov.jar.

È possibile selezionarlo dopo aver fatto clic su New keystore o modificare il tipo tramite il menu Tools -> Change KeyStore Type.

+1

Da Portecle v1.8 puoi semplicemente selezionare BKS-V1 nella finestra di dialogo "Nuovo KeyStore" o convertire tra BKS e BKS-V1 tramite "Strumenti -> Cambia tipo di KeyStore". Non è necessario sostituire i vasetti. – Omikron

+0

Avevo una versione precedente, buono a sapersi. –

Problemi correlati