Pregunta

He creado un certificado básicamente directamente desde la página de ejemplo herramienta de claves:

  

herramienta de claves -genkey -dNOMBRE "cn = Cualquier cosa, ou = Cualquier cosa, o = Cualquier cosa, c = US" -alias negocio -keypass kpi135 -keystore C: \ mykeystore -storepass ab987c -validity 1095

Estoy intentando tener acceso a este certificado y utilizar la parte clave privada para firmar digitalmente una parte del texto para autenticar con un tercero. A continuación se muestra el código que estoy intentando:

   //Add bouncyCastle as a provider
   Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider());

   KeyStore keystore = KeyStore.getInstance("JKS");
   keystore.load(new FileInputStream("C:\\mykeystore"), "ab987c".toCharArray());
   Signature sig = Signature.getInstance("MD5withRSA", "BC");
   PrivateKey privateKey = (PrivateKey)keystore.getKey("business", "kpi135".toCharArray()); //Exception here
   sig.initSign(privateKey);
   sig.update("myUID__myNonce".getBytes());
   byte[] digitalSignature = sig.sign();

   System.out.println("Signature Formulated: " + digitalSignature);

Me sale el siguiente excepción:

java.security.InvalidKeyException: Supplied key (sun.security.provider.DSAPrivat
eKey) is not a RSAPrivateKey instance
        at org.bouncycastle.jce.provider.JDKDigestSignature.engineInitSign(Unkno
wn Source)
        at java.security.Signature$Delegate.engineInitSign(Signature.java:1095)
        at java.security.Signature.initSign(Signature.java:480)
        at MainClass.<init>(MainClass.java:15)
        at MainClass.main(MainClass.java:28)

supongo que es porque de alguna manera he creado el certificado con el tipo equivocado de llave, pero no estoy seguro de que estoy encontrando lo que necesito excavando a través de la página de herramienta de claves. Es hace mención que al parecer puede generar una clave utilizando -keysig y sin embargo RSA RSA -sigalg cuando intento esas banderas en la creación de un certificado me sale:

keytool error: java.security.NoSuchAlgorithmException: RSA Signature not availab
le

enter code here
¿Fue útil?

Solución

En realidad parece que se puede añadir "RSA -keyalg" al comando keygen que alivia el problema de falta de coincidencia. Yo estaba tratando de forma incorrecta tanto -keyalg y -sigalg en el mismo comando keygen. El código anterior ahora se ejecuta sin excepciones.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top