utiliza recomienda propietario permitida opcion migrar kit introduzca herramienta formato existe ejemplo desarrollo contraseña claves certificados archivo almacén almacen administración java ws-security

java - recomienda - No se puede obtener la clave de KeyStore



keytool java (3)

En la línea ks.getEntry, le está dando la contraseña de la tienda. Debe ser la contraseña clave en su lugar. Reemplace la línea con esto y funcionará:

char[] keypwd = "abcdtest".toCharArray(); KeyStore.PrivateKeyEntry keyEnt = (KeyStore.PrivateKeyEntry) ks.getEntry("business2", new KeyStore.PasswordProtection(keypwd));

Intento obtener clave de KeyStore. He creado un keystore por Keytool:

keytool -genkeypair -dname "cn = Mark Jones, ou = JavaSoft, o = Sun, c = US" -alias business2 -keypass abcdtest -keystore C: / workspace / XMLSample / keystore / mykeystore.jks -storepass 123456

Y lo siguiente es GenerateXML.java

import java.io.FileInputStream; import java.security.KeyStore; import java.security.cert.X509Certificate; import javax.xml.crypto.dsig.XMLSignContext; import javax.xml.crypto.dsig.XMLSignatureFactory; import javax.xml.crypto.dsig.dom.DOMSignContext; import javax.xml.parsers.DocumentBuilderFactory; import org.w3c.dom.Document; public class GenerateXML { public static void main(String[] args) throws Exception { try { char[] passwd = "123456".toCharArray(); //Load the KeyStore and get the signing key and certificate KeyStore ks = KeyStore.getInstance("JKS"); ks.load(new FileInputStream("C://workspace//XMLSample//keystore//mykeystore.jks"), passwd); KeyStore.PrivateKeyEntry keyEnt = (KeyStore.PrivateKeyEntry)ks.getEntry("business2", new KeyStore.PasswordProtection(passwd)); // -> ERROR IN THIS ROW X509Certificate cert = (X509Certificate)keyEnt.getCertificate(); //Create a DOMSignContext XMLSignContext context = new DOMSignContext(keyEnt.getPrivateKey(), doc.getDocumentElement()) ; //Create a DOM XMLSignatureFactory XMLSignatureFactory fac = XMLSignatureFactory.getInstance("DOM"); } catch(Exception e) { e.printStackTrace(); throw new Exception(e.toString()); } } }

Corro en java 1.6

Pero ten error:

java.security.UnrecoverableKeyException: Cannot recover key at sun.security.provider.KeyProtector.recover(KeyProtector.java:311) at sun.security.provider.JavaKeyStore.engineGetKey(JavaKeyStore.java:121) at sun.security.provider.JavaKeyStore$JKS.engineGetKey(JavaKeyStore.java:38) at java.security.KeyStoreSpi.engineGetEntry(KeyStoreSpi.java:456) at java.security.KeyStore.getEntry(KeyStore.java:1261) at xml.generate.GenerateXML.main(GenerateXML.java:31)


Esto básicamente significa 2 cosas,

  1. Tenías una contraseña incorrecta.
  2. Su almacén de claves está corrompido de alguna manera.

Sospecho que es el # 1. Comprueba tu contraseña. Intente si puede listar la clave en keytool con la misma contraseña.


Me he encontrado con el problema similar. La raíz del problema fue que usé una contraseña diferente para la clave que para todo el almacén de claves. El código es similar al del artículo de JSSE. Se parece a esto:

serverKeyStore.load(new FileInputStream("resource/server.jks"), passphrase.toCharArray()); TrustManagerFactory tmf = TrustManagerFactory.getInstance("SunX509"); tmf.init(serverKeyStore); KeyManagerFactory kmf = KeyManagerFactory.getInstance("SunX509"); kmf.init(serverKeyStore, keyphrase.toCharArray());

Uso el paso de almacén de claves en la primera línea y el paso de clave en la última.