Me gustaría validar manualmente el documento PDF firmado por RSA, pero no recibo una firma diferente a la codificada dentro del PDF. Aquí están los pasos que seguí, cualquier ayuda / pistas realmente apreciadas.
- Hice un texto PDF simple (~ 1Kb)
- He generado el archivo pfx openssl con la clave RSA de 2048 bits adecuada
- Realicé una carga de la clave mencionada en el certificado de usuario de Windows
- Utilicé la clave mencionada para firmar PDF a través de JSignPdf 1.6.3 (algoritmo hash sha-256)
El resultado de los pasos anteriores es un documento PDF debidamente firmado (barra superior verde). Luego utilicé notepad ++ para eliminar el campo de contenido como se describe en la documentación de Adobe para recibir un archivo sin procesar para calcular si el hash coincide con el incrustado dentro de la estructura de contenido. Este paso fue exitoso, mi SHA-256 coincidió.
Aquí está la salida del decodificador ASN.1 para el valor del campo de contenido del PDF:
2.16.840.1.101.3.4.2.1sha-256 (Algoritmo NIST)
1.2.840.113549.1.9.3contentType (PKCS # 9)
1.2.840.113549.1.7.1datos (PKCS # 7)
1.2.840.113549.1.9.4messageDigest (PKCS # 9) 32 bytes
E271FBADC18080C7E8BD5F0FFBCA0BD77E488309E450D28B79B720D08F69F3FC
1.2.840.113549.1.1.1rsaEncryption (PKCS # 1) 256 bytes
6547B3C9658AA8C1C259A97F1B336A099677013EDABE315F9C18C4CE6B6341CAA7054…
Puedo obtener el mismo valor calculando SHA-256 en este archivo modificado manualmente como el incrustado en PDF (E271FB *).
El problema al que me enfrento es que no puedo obtener el último valor rsaEncryption manualmente en el mismo archivo compatible con sha-256 o simplemente en función del hash mencionado.
Esto es lo que probé ...
- openssl dgst -sign ./domain.key file_hash.pdf> signature.bin
- openssl dgst -sha256 -sign ./domain.key -out signature.bin file_hash.pdf
Donde file_hash.pdf es el archivo que sha-256 coincide con el PDF verde de JSignPDF y domain.key es la misma clave importada en Windows (con texto --- comience la clave privada ---).
¿Pueden aconsejarme qué estoy haciendo mal al final o cómo puedo lograr este valor 6547B *?
fuente