2011-02-05 14 views
12

Creé Java keystore programáticamente de tipo jks (es decir, tipo predeterminado).
Inicialmente está vacío, así que creé un certificado DSA.keytool - vea las claves pública y privada

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

¿Cómo puedo ver las claves pública y privada?
I.e. ¿Hay algún comando que imprima la clave privada de mi certificado?
sólo pude encontrar keytool -certreq que en mi entendimiento imprime el certificado en su conjunto:

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

Asumo que esto es el todo del certificado. ¿Cómo puedo ver la clave privada (o pública) a través de la herramienta de claves?

Respuesta

5

Creó una clave privada (y pública asociada) en su almacén de claves. Para que sea realmente utilizable, puede obtenerla firmada por una agencia de certificación (CA); este es el comando -certreq (usted envía el resultado a esta agencia de certificación, junto con otra información y un poco de dinero, y ellos envían respaldar un certificado, que luego puede importar en su almacén de claves.)

Ver la clave privada no está destinada ... normalmente no la necesita, ya que usa el almacén de claves en su programa Java, y esto sabe cómo para usarlo


Editar: Puesto que usted quiere mirar a su almacén de claves, aquí un programa rápido de Java que hace esto:

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

    } 
} 

Primera llamada keytool -list -keystore myStore saber qué alias a buscar, a continuación, llamar a este programa con las contraseñas y los parámetros. En el caso de una entrada de clave privada, muestra la clave en sí y, además, un certificado autofirmado que contiene la clave pública, en forma legible. En el caso de un "certificado de confianza", muestra solo la clave pública.

+0

Ok, entonces no está interesado en ver la clave privada. ¿Qué pasa con la clave pública? ¿Existe un comando para mostrar la clave pública? – Cratylus

+0

Acabo de agregar una clase Java simple para ver el almacén de claves. (Fue bastante más complicado, incluso intenté formatear la clave yo mismo ... hasta que tuve la idea de probar el método 'toString()'.) –

+0

@MircoWidmer - gracias por su [editar sugerencia] (http://stackoverflow.com/review/suggested-edits/11463131). No tengo idea de por qué las personas lo rechazaron (las razones mencionadas ciertamente no son válidas) cuando simplemente estabas arreglando un error tipográfico. Lo arreglé ahora. –

7

No, no puedes.
Puede acceder a la clave privada desde el código, pero no puede exportarla con la herramienta de claves.
Use OpenSSL si necesita exportar una clave privada.

Otra opción: puede generar un almacén de claves en formato PKCS12. Luego puede importarlo a un navegador y luego exportar la clave privada.

3

(Portecle) es una herramienta GUI muy conveniente para administrar almacenes de claves. Y, entre otras cosas, tiene una opción para exportar clave privada y su certificado asociado.

La forma más común de compartir su clave pública es compartir un certificado para su par de claves (que contiene su clave pública en el interior)

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

o

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

como se señala en

keytool -help 
Cuestiones relacionadas