Skip to content

Instantly share code, notes, and snippets.

@acuartango
Created October 13, 2022 07:05
Show Gist options
  • Save acuartango/8fbc8b67d4084a6e05186f7dd09588c4 to your computer and use it in GitHub Desktop.
Save acuartango/8fbc8b67d4084a6e05186f7dd09588c4 to your computer and use it in GitHub Desktop.
firma_digital_desde_linea_de_comandos.md
# 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