es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Java 11 – clave privada de curva elíptica – java.security.InvalidKeyException: IOException: error de etiqueta entero en la entrada DER.

Pequeña pregunta sobre cómo usar una clave privada de curva elíptica con Java 11, por favor.

Tengo estos comandos:

openssl pkcs12 -in file.p12 -out output.txt
Enter Import Password:
MAC verified OK
Enter PEM pass phrase:
Verifying - Enter PEM pass phrase:

Luego, puedo ejecutar “cat” en la salida:

cat output.txt
Bag Attributes
    friendlyName: 
    localKeyID: 
Key Attributes: <No Attributes>
-----BEGIN ENCRYPTED PRIVATE KEY-----
MI[...]0=
-----END ENCRYPTED PRIVATE KEY-----
Bag Attributes
    friendlyName: 
    localKeyID: 
subject=/CN=
issuer=/CN=
-----BEGIN CERTIFICATE-----
MII[...]Z
-----END CERTIFICATE-----

Nota: Utilicé […] para ocultar el contenido real.

Y solo quiero usar esta clave privada, la que está en el bloque -----BEGIN ENCRYPTED PRIVATE KEY----- -----END ENCRYPTED PRIVATE KEY-----.

Por lo tanto, intenté lo siguiente:
Primero eliminé BEGIN ENCRYPTED PRIVATE, los saltos de línea y END ENCRYPTED PRIVATE KEY.

String privateKeyPEM = "MI[...]0="; // la misma clave privada de arriba
byte[] keyData = Base64.getDecoder().decode(privateKeyPEM);
EncodedKeySpec privKeySpec = new PKCS8EncodedKeySpec(keyData);
KeyFactory kf = KeyFactory.getInstance("EC");
PrivateKey privKey = kf.generatePrivate(privKeySpec);

Sin embargo, obtengo el siguiente error:

java.security.InvalidKeyException: IOException : DER input, Integer tag error
    at java.base/sun.security.pkcs.PKCS8Key.decode(PKCS8Key.java:350)
    at java.base/sun.security.pkcs.PKCS8Key.decode(PKCS8Key.java:355)
    at jdk.crypto.ec/sun.security.ec.ECPrivateKeyImpl.<init>(ECPrivateKeyImpl.java:74)
    at jdk.crypto.ec/sun.security.ec.ECKeyFactory.implGeneratePrivate(ECKeyFactory.java:237)
    at jdk.crypto.ec/sun.security.ec.ECKeyFactory.engineGeneratePrivate(ECKeyFactory.java:165)

¿Podría preguntar cuál es el problema, por favor?
Además, ¿podría preguntar cómo solucionarlo?

Gracias.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    El mensaje de error sugiere que hay un problema con el formato de la clave privada de entrada. Esto podría deberse a una decodificación incorrecta de la cadena Base64 o a un formato de clave malformado. Para solucionar este problema, puedes intentar los siguientes pasos:

    1. Asegúrate de que la decodificación Base64 sea correcta verificando la longitud y el contenido del arreglo de bytes decodificado.
    2. Verifica que el formato de la clave privada sea correcto comparándolo con el formato esperado para la curva elíptica que estés utilizando. Por ejemplo, si estás utilizando la curva P-256, la clave privada debería tener una longitud de 32 bytes.

    3. Intenta utilizar un formato de representación de clave diferente, como PKCS#12 o JKS, si está disponible.

    4. Si ninguno de los pasos anteriores soluciona el problema, considera buscar ayuda de un experto en criptografía o de la comunidad Java para obtener asistencia adicional.

    En resumen, el problema al utilizar la clave privada de la curva elíptica con Java 11 podría ser causado por un formato de clave incorrecto o una decodificación Base64 incorrecta. Para solucionarlo, verifica el formato de la clave privada de entrada e intenta diferentes formatos de representación de clave.

Comments are closed.