2012-05-31 14 views
7

Sto provando a creare l'archiviazione delle chiavi utilizzando Keytool con i miei algoritmi.Keytool con algoritmi personalizzati

Ho creato java.security.provider personalizzato con classi estese di SignatureSPI, MessagedigestSPI e KeyPairGeneratorSPI e l'ho installato in modo statico.

problema che ho incontrato è quando sto cercando di creare storage utilizzando:

keytool -alias something -genkeypair -keyalg GOST2001KeyPairGenerator -sigalg GOST2001Signature -providerclass ru.test.security.test_provider -storetype pkcs12 -keystore test_keystore 

ottengo i miei messaggi di debug e un errore:

GOST2001KeyPairGenerator initialize 
GOST2001KeyPairGenerator generateKeyPair 
GOST2001Signature engineInitSign 
keytool error: java.lang.RuntimeException: internal error! unrecognized algorithm name: GOST2001Signature 

cosa strana è che l'algoritmo in realtà a partire da eseguire ma essere chiamato in seguito non riconosciuto. Non capisco cosa non va.

+0

Hai provato a farlo funzionare prima con un semplice programma Java? Non penso che il tuo provider verrà riconosciuto a meno che non sia firmato da Oracle. –

+0

L'ho fatto. 1. Ho testato tutte le mie lezioni usando addProvider. 2. Poi l'ho aggiunto in modo statico e ho appena chiamato i metodi standart usando di nuovo istanze dei miei algoritmi dal programma java. Tutto funziona bene fino a quando non uso Keytool, è lì che il problema si presenta. –

+0

Grazie, puoi pubblicare una traccia stack completa? Questo [collegamento] (http://bouncy-castle.1462172.n4.nabble.com/Unable-to-create-GOST3410-keypair-with-keytool-td1463711.html) potrebbe indicare alcune brutte notizie. –

risposta

1

Beh, è ​​difficile dire cosa sta succedendo senza essere in grado di vedere i progressi che il programma sta facendo all'interno del proprio algoritmo. Prova a rintracciare le parti del tuo programma che funzionano effettivamente con i messaggi di debug, ecc. Così sai cosa funziona e cosa no.

Se esiste una RuntimeException, potrebbe rimanere bloccata in un ciclo. E se l'algoritmo GOST2001Signature è una quota irriconoscibile, potrebbe esserci un problema. Se ha funzionato una volta, forse non lo si inizializza una seconda volta. Di solito quando parte di un programma ho scritto una volta ma non una seconda volta ho dimenticato di inizializzare qualcosa causando la modifica del risultato, ecc.

Buona fortuna. Spero che i miei suggerimenti aiutino.

1

Ecco quello che ho fatto:

  • Sarà necessario fare un barattolo di voi provider personalizzato e le classi di cui ha bisogno.
  • Successivamente è necessario inserire tale jar in: C: \ Programmi \ Java \ jre6 \ lib \ ext
  • Aggiungere security.provider.7 = my.package.MyProvider a java.security (7 è il prossimo int nell'ordine).
  • Utilizzare l'opzione -providerName MYPROVIDERNAME sulla riga comandi dello strumento chiave
  • Se si prevede di utilizzare -providerClass assicurarsi di utilizzare il nome completo, non solo il nome della classe.

Che dovrebbe farlo ..

In caso contrario, dopo la correzione delle opzioni, è ancora ottenere un NoSuchProviderException (utilizzando -providerName) o ClassNotFoundException (usando -providerClass), verificare che si sta utilizzando la copia giusta di keytool. Cioè, quando si esegue, specificare il percorso completo di keytool, piuttosto che fare affidamento sulla variabile PATH. Assicurati che il percorso faccia riferimento al JRE in cui è stato installato il tuo provider. Molti sistemi (come il mio) hanno più JRE/JDK installati.

Buona fortuna.

+0

Assegnato il premio senza essere in grado di verificare la correttezza, e sfortunatamente l'autore non è stato in grado di rispondere in tempo neanche. Sembra comunque una risposta sensata. –

+0

Molti thx, ha funzionato per me, quindi spero che possa aiutare alcuni di voi. – Frank

+0

Il problema originale era dovuto al fatto che keytool non poteva riconoscere l'algoritmo in runtime. Non ha nulla a che fare con il provider, come puoi vedere in questione. Ho installato correttamente il provider, java lo ha collegato e ho iniziato a chiamare i metodi. Comunque è bello che la tua risposta abbia aiutato qualcuno. La domanda per me non è più reale, sono riuscito a creare il contenitore PKCS # 12 tramite OPENSSL API. –