2011-02-05 17 views
12

Ho creato il keystore Java a livello di codice di tipo jks (vale a dire il tipo predefinito).
Inizialmente vuoto, quindi ho creato un certificato DSA.keytool - vedere le chiavi pubbliche e private

keytool -genkey -alias myCert -v -keystore trivial.keystore 

Come posso vedere le chiavi pubbliche e private?
I.e. c'è un comando che stampa la chiave privata del mio certificato?
ho potuto trovare solo keytool -certreq che nella mia comprensione stampa il certificato nel suo complesso:

-----BEGIN NEW CERTIFICATE REQUEST----- 
MIICaTCCAicCAQAwZTELMAkGA1UEBhMCR1IxDzANBgNVBAgTBkdyZWVjZTEPMA0GA1UEBxMGQXRo 
BQADLwAwLAIUQZbY/3Qq0G26fsBbWiHMbuVd3VICFE+gwtUauYiRbHh0caAtRj3qRTwl 
-----END NEW CERTIFICATE REQUEST----- 

Suppongo che questo è il tutto certificato. Come posso vedere private (o chiave pubblica) tramite keytool?

risposta

5

è stata creata una chiave privata (e associati pubblico) nel vostro keystore. Perché sia ​​veramente utilizzabile, è possibile farlo firmare da un'agenzia di certificazione (CA) - per questo è il comando -certreq (si invia l'output a questa agenzia di certificazione, insieme ad altre informazioni e un po 'di denaro, e si invia indietro un certificato, che puoi quindi importare nel tuo keystore.)

La visualizzazione della chiave privata non è destinata ... di solito non ti serve, dato che usi il keystore nel tuo programma Java, e questo sa come per usarlo.


Edit: Dal momento che si vuole guardare il vostro chiavi, ecco un programma rapido Java che fa questo:

import java.io.*; 
import java.security.*; 
import java.security.cert.Certificate; 

public class KeyPrinter { 

    /** 
    * to be invoked with these parameters: 
    * 
    * [0]: keystore-password 
    * [1]: filename 
    * [2]: alias 
    * [3]: entry-Password (if necessary) 
    */ 
    public static void main(String[] params) 
     throws IOException, GeneralSecurityException 
    { 
     char[] storePass = params[0].toCharArray(); 
     String fileName = params[1]; 
     String alias = params[2]; 
     KeyStore.ProtectionParameter entryPass; 
     if(params.length > 3) { 
     entryPass=new KeyStore.PasswordProtection(params[3].toCharArray()); 
     } else { 
      entryPass = null; 
     } 

     KeyStore store = KeyStore.getInstance("JKS"); 
     InputStream input = new FileInputStream(fileName); 
     store.load(input, storePass); 

     KeyStore.Entry entry = store.getEntry(alias, entryPass); 
     System.out.println(entry); 

    } 
} 

Prima chiamata keytool -list -keystore myStore sapere quali alias cercare, quindi chiamare questo programma con le password e i parametri. Nel caso di una chiave privata, mostra la chiave stessa e inoltre un certificato autofirmato che contiene la chiave pubblica, in una forma leggibile. Nel caso di un "certificato di fiducia", mostra solo la chiave pubblica.

+0

Ok, quindi la visualizzazione della chiave privata non è intuita. Che cos'è la chiave pubblica? Esiste un comando per visualizzare la chiave pubblica? – Cratylus

+0

Ho appena aggiunto una semplice classe java per visualizzare il keystore. (E 'stato un po' più complicato, ho persino provato a formattare la chiave ... fino a quando non ho avuto l'idea di provare il metodo 'toString()'.) –

+0

@MircoWidmer - grazie per il tuo [modifica suggerimento] (http://stackoverflow.com/review/suggested-edits/11463131). Non ho idea del motivo per cui le persone l'hanno rifiutato (le ragioni citate certamente non sono valide) quando stavi semplicemente correggendo un refuso. L'ho risolto ora. –

7

No, non è possibile.
È possibile accedere alla chiave privata dal codice, ma non è possibile esportarla utilizzando il tasto keytool.
Utilizzare OpenSSL se è necessario esportare la chiave privata.

Un'altra opzione: è possibile generare chiavi in ​​formato PKCS12. Quindi è possibile importarlo in un browser e quindi esportare la chiave privata.

3

(Portecle) è uno strumento di interfaccia grafica molto conveniente per la gestione degli archivi di chiavi. E tra l'altro ha un'opzione per esportare la chiave privata e il suo certificato associato.

Il modo più comune per condividere la vostra chiave pubblica è quello di condividere un certificato per la vostra coppia di chiavi (che contiene la chiave pubblica all'interno)

1
keytool -list -v -alias myCert -storepass 123456 -keystore file.jks 

o

keytool -list -rfc -alias myCert -storepass 123456 -keystore file.jks 

come indicato nella

keytool -help