Skip to content

Instantly share code, notes, and snippets.

@acuartango
Created October 13, 2022 07:06
Show Gist options
  • Save acuartango/4ce393c37072df11fe1bddc38ee9960f to your computer and use it in GitHub Desktop.
Save acuartango/4ce393c37072df11fe1bddc38ee9960f to your computer and use it in GitHub Desktop.

Firma Digital de un archivo PDF desde línea de comandos

Estaba buscando cómo firmar un PDF desde línea de comandos y he encontrado un programa que lo hace estupendamente: "pyhanko":

Página del proyecto: https://github.com/MatthiasValvekens/pyHanko

Se instala como cualquier programa de python: pip install pyhanko

Estas son algunas pruebas que he hecho, con un certificado hardware pkcs11 de Izenpe y con un fichero pkcs12 de la FNMT.

Firma Visible e invisible (debajo) con tarjeta física pkcs11 de izenpe (la librería es la que provee izenpe, habría que seleccionar la de cada fabricante de cada chip):

pyhanko --verbose sign addsig --field "1/100,100,300,200/Nombre Apellido" pkcs11 --lib /usr/lib/libbit4ipki.so --cert-label "NOMBRE APELLIDO1 APELLIDO2 - 11111111H" fichero_para_firmar.pdf firmado.pdf

pyhanko --verbose sign addsig --field "Nugbe" pkcs11 --lib /usr/lib/libbit4ipki.so  --cert-label "AITOR CUARTANGO BERRENDO - 44152842H" test\ firma.pdf firmado22234.pdf

Firma invisible con FNMT:

pyhanko --verbose sign addsig --field FIRMADO pkcs11 --lib /usr/lib/libbit4ipki.so --cert-label "NOMBRE APELLIDO1 APELLIDO2 - 11111111H" fichero_para_firmar.pdf firmado.pdf

Para usar una TSA:

pyhanko --verbose sign addsig --field FIRMADO --timestamp-url http://tss.accv.es:8318/tsa pkcs12 fichero_para_firmar.pdf firmado.pdf MI_CERTIFICADO_FNMT.p12

Contenido de la smartcard

Me guardo unos comandos para listar el contenido de mi smartard (del fabricante bit4id, que es el que usan los certificados en tarjeta de Izenpe). Hay que cargar el driver de la smartcard en la línea de comandos para que sepa qué librería del sistema usar con el modificadosr "--module"

pkcs11-tool --module /usr/lib/bit4id/libbit4ipki.so  --list-objects -O
pkcs11-tool --module /usr/lib/bit4id/libbit4ipki.so  --list-objects --type cert 
pkcs11-tool --module /usr/lib/bit4id/libbit4ipki.so -O -l

Para descargar mi clave pública (el ID se obtiene en el punto anterior, este es inventado):

pkcs11-tool --module /usr/lib/bit4id/libbit4ipki.so  --read-object --id 123123123123123 --type cert --output-file cert.der

Para visualizar el texto del certificado (clave pública):

openssl x509 -in cert.der -inform der  -noout -text

Otros comandos que dan información:

pkcs15-tool --dump
pkcs15-tool  --list-certificates

keywords: digital signature from command line pkcs11 pkcs12 smart card smartcard izenpe fnmt izenpe pkcs15 pkcs15-tool pkcs11-tool openssl bit4id

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment