Ver Mensaje Individual
  #5 (permalink)  
Antiguo 07/08/2009, 00:47
Avatar de alrik
alrik
 
Fecha de Ingreso: enero-2005
Mensajes: 45
Antigüedad: 20 años
Puntos: 0
Respuesta: certificado y firma digital

PORRRRRR FINNNNNNNNN LO HE CONSEGUIDO, hay que ver la de tiempo que me he tirado... puff.

Al final he descubierto que solo se puede hacer lo siguiente:

Mediante esta página:

http://codeartisan.blogspot.com/2009...y-in-java.html

Hay que seguir estos pasos a hacer con tu clave privada para generar una nueva clave pública válida en JAVA.

# generate a 2048-bit RSA private key
$ openssl genrsa -out private_key.pem 2048

# convert private Key to PKCS#8 format (so Java can read it)
$ openssl pkcs8 -topk8 -inform PEM -outform DER -in private_key.pem \
-out private_key.der -nocrypt

# output public key portion in DER format (so Java can read it)
$ openssl rsa -in private_key.pem -pubout -outform DER -out public_key.der

Después os aseguro que funciona:

Código:
public static PublicKey get(String filename)
        throws Exception {
        File f = new File(filename);
        FileInputStream fis = new FileInputStream(f);
        DataInputStream dis = new DataInputStream(fis);
        byte[] keyBytes = new byte[(int)f.length()];
        dis.readFully(keyBytes);
        dis.close();

        X509EncodedKeySpec spec =
          new X509EncodedKeySpec(keyBytes);
        KeyFactory kf = KeyFactory.getInstance("RSA");
        return kf.generatePublic(spec);
    }
Este código os permitirá conseguir la clavePública desde un fichero.

Código:
     public static boolean verifySig(byte[] data, PublicKey key, byte[] sig) throws Exception {
        Signature signer = Signature.getInstance("SHA1withRSA");
        signer.initVerify(key);
        signer.update(data);
        return (signer.verify(sig));
      }
Este os permitirá verificar la firma digital.

Cuando leáis la firma como tenéis que pasarla en binario si la leeis de algún sitio que esté en hexadecimal:

byte[] signature = new BigInteger(keyzamSignature, 16).toByteArray();

Y ya está ahí acaba mi quebradero de cabeza durante 8 días.