Hola a todos. Actualmente estoy haciendo un pequeño programa web con PHP y utilizo DNI electrónico para hacer la autenticación y firma. La autenticación la hago sin problema, incluso valido frete al oscp de la policia.
El problema que tengo es que quiero firmar un documento y no lo consigo. Sin embargo si he conseguido firmar un texto. La forma de firmarlo es usando la funcion crypto.signText de javascript. Con esa función, me pide que elija el certificado a usar para firmar y la clave.Una vez que se firma el texto, cojo la firma generada y la guardo en un fichero.
La cosa es que cuando me pongo a verificar que la firma generada corresponde con el texto generado no me funciona. Lo que hago es guardar la firma en un fichero y el texto original en otro. Para verificarlo ejecuto el comando de openssl siguiente:
openssl smime -verify -inform pem -in sig -content msg -CAfile CA.pem
donde msg es el fichero donde tengo el texto guardado, sig es el fichero donde tengo la firma guardada y CA.pem es el certificado de la CA que se puede obtener en la web de DNI electrónico. Bueno, pues si para firmar uso el certificado de firma electrónica ese comando me dice que no es válido pero si uso el certificado de autenticación para firmar, ese comando me dice que es válido... por lo que deduzco, es que el CA que dan en dnielectronico.es es de autenticación pero no el de firma. ¿Alguien sabe como verificar todo esto?
Por último, para firmar un fichero se me ha ocurrido hacer el MD5 del fichero para obtener un resumen y firmar ese MD5, pero no sé si es correcto.
Saludos y gracias