ctt-gob-es / clienteafirma

Cliente @firma
http://administracionelectronica.gob.es/ctt/clienteafirma
253 stars 119 forks source link

Firmar desde linea de comandos #20

Closed alfem closed 6 years ago

alfem commented 6 years ago

Para integrar AutoFirma en el administrador de ficheros de GECOS/Guadalinex/Ubuntu... me gustaría hacer algunas pruebas llamando a AutoFirma desde línea de comandos.

Sin embargo, no consigo indicarle qué certificado debe usar. Ni con el parámetro -alias ni con -filter. ¿Podríais poner algún ejemplo?

alfem commented 6 years ago

Finalmente encontré en java/es/gob/afirma/keystores/filters/CertFilterManager.java una lista de posibles filtros, y he conseguido firmar usando el filtro 'subject.contains':

AutoFirma sign -i /tmp/test-firma.txt -o /tmp/test-firma.signed -store mozilla -filter subject.contains:28555555T

aziraphel commented 6 years ago

Perdona por la pregunta pero sabes donde puedo encontrar la informacion de como usar Autofirma por linea de comandos? Muchas gracias

alfem commented 6 years ago

Por lo que se, leyendo el código fuente. No está muy documentado.

xxcalibur commented 6 years ago

El comando firma el fichero pero con alguna diferencia a nivel de fichero cuando se firma por comando o cuando se firma a través de la aplicación. Si firmas el fichero por los dos métodos y comparas el tamaño de los dos ficheros son diferentes.

El fichero que estoy intentando es un .zip, el cual, contiene un .xml. Cuando lo firmas con la aplicación, el fichero final se puede descomprimir, cuando lo firmas por comando, el fichero de salida sale con un formato desconocido o dañado y no se puede descomprimir.

¿Alguna ayuda o idea? Gracias de antemano.

a2garrido commented 4 years ago

Sintaxis: AutoFirma cmd [options...] Comandos cmd:

sign (firma de fichero) cosign (cofirma de fichero) countersign (contrafirma de fichero) listaliases (lista los alias disponibles en el almacén) verify (abre un panel con la información de validación de una firma o certificado)

batchsign (firma/multifirma de lotes de ficheros)

createdigest (creación de huella digitales con interfaz gráfica)

checkdigest (comprobación de huella digitales con interfaz gráfica)


Sintaxis: AutoFirma sign [options...]

options

-gui (Realiza la operación con entorno gráfico. Tiene prioridad sobre -certgui) -certgui (Usa un dialogo gráfico para la selección del certificado de firma) -i inputfile (Ruta del fichero de entrada) -o outputfile (Ruta del fichero de salida) -algorithm algo (Algoritmo de firma) -format (Establece el formato de firma) auto (Selección de formato en base al fichero de entrada) cades (Formato CAdES) pades (Formato PAdES) xades (Formato XAdES) facturae (Firma de factura electronica) ooxml (Formato OOXML) odf (Formato ODF) -config extraParams (Properties en texto plano con la configuración de la operación) -store (Establece el almacén de claves. Por defecto, el del sistema) auto (Almacén de claves del sistema) windows (Almacén de claves de Windows) mac (Almacén de claves de Mac OS X) mozilla (Almacén de claves de Mozilla Firefox) dni (DNI electrónico) pkcs12:p12file (Almacén PKCS#12. "p12file" es la ruta del almacén) pkcs11:p11file (Almacén PKCS#11. "p11file" es la ruta del controlador)

-password password (Establece la contraseña del almacén) -alias alias (Alias del certificado de firma) -filter filter (Filtro para seleccionar el certificado de firma) -xml (Formatea la respuesta como XML)


Sintaxis: AutoFirma cosign [options...]

options

-gui (Realiza la operación con entorno gráfico. Tiene prioridad sobre -certgui) -certgui (Usa un dialogo gráfico para la selección del certificado de firma) -i inputfile (Ruta del fichero de entrada) -o outputfile (Ruta del fichero de salida) -algorithm algo (Algoritmo de firma) -format (Establece el formato de firma) auto (Selección de formato en base al fichero de entrada) cades (Formato CAdES) pades (Formato PAdES) xades (Formato XAdES) facturae (Firma de factura electronica) ooxml (Formato OOXML) odf (Formato ODF) -config extraParams (Properties en texto plano con la configuración de la operación) -store (Establece el almacén de claves. Por defecto, el del sistema) auto (Almacén de claves del sistema) windows (Almacén de claves de Windows) mac (Almacén de claves de Mac OS X) mozilla (Almacén de claves de Mozilla Firefox) dni (DNI electrónico) pkcs12:p12file (Almacén PKCS#12. "p12file" es la ruta del almacén) pkcs11:p11file (Almacén PKCS#11. "p11file" es la ruta del controlador)

-password password (Establece la contraseña del almacén) -alias alias (Alias del certificado de firma) -filter filter (Filtro para seleccionar el certificado de firma) -xml (Formatea la respuesta como XML)


Sintaxis: AutoFirma countersign [options...]

options

-gui (Realiza la operación con entorno gráfico. Tiene prioridad sobre -certgui) -certgui (Usa un dialogo gráfico para la selección del certificado de firma) -i inputfile (Ruta del fichero de entrada) -o outputfile (Ruta del fichero de salida) -algorithm algo (Algoritmo de firma) -format (Establece el formato de firma) auto (Selección de formato en base al fichero de entrada) cades (Formato CAdES) pades (Formato PAdES) xades (Formato XAdES) facturae (Firma de factura electronica) ooxml (Formato OOXML) odf (Formato ODF) -config extraParams (Properties en texto plano con la configuración de la operación) -store (Establece el almacén de claves. Por defecto, el del si stema) auto (Almacén de claves del sistema) windows (Almacén de claves de Windows) mac (Almacén de claves de Mac OS X) mozilla (Almacén de claves de Mozilla Firefox) dni (DNI electrónico) pkcs12:p12file (Almacén PKCS#12. "p12file" es la ruta del almacén) pkcs11:p11file (Almacén PKCS#11. "p11file" es la ruta del controlador)

-password password (Establece la contraseña del almacén) -alias alias (Alias del certificado de firma) -filter filter (Filtro para seleccionar el certificado de firma) -xml (Formatea la respuesta como XML)

Sintaxis: AutoFirma listaliases [options...]

options

-store (Establece el almacén de claves. Por defecto, el del sistema) auto (Almacén de claves del sistema) windows (Almacén de claves de Windows) mac (Almacén de claves de Mac OS X) mozilla (Almacén de claves de Mozilla Firefox) dni (DNI electrónico) pkcs12:p12file (Almacén PKCS#12. "p12file" es la ruta del almacén) -password password (Establece la contraseña del almacén) -xml (Formatea la respuesta como XML)


Sintaxis: AutoFirma verify [options...]

options -i inputfile (Ruta del fichero de entrada)


Sintaxis: AutoFirma batchsign [options...]

options

-i inputfile (Ruta del fichero de configuración de la operación) -o outputfile (Ruta del fichero con el XML resultado de la operación)

-store (Establece el almacén de claves. Por defecto, el del sistema) auto (Almacén de claves del sistema) windows (Almacén de claves de Windows) mac (Almacén de claves de Mac OS X) mozilla (Almacén de claves de Mozilla Firefox) dni (DNI electrónico) pkcs12:p12file (Almacén PKCS#12. "p12file" es la ruta del almacén) pkcs11:p11file (Almacén PKCS#11. "p11file" es la ruta del controlador)

-password password (Establece la contraseña del almacén) -alias alias (Alias del certificado de firma) -filter filter (Filtro para seleccionar el certificado de firma) -preurl url (URL del servicio externo de prefirma) -posturl url (URL del servicio externo de postfirma) -xml (Formatea la respuesta como XML)


Sintaxis: AutoFirma createdigest [options...]

options -i inputfile (Ruta del fichero o directorio de entrada)


Sintaxis: AutoFirma checkdigest [options...]

options -i inputfile (Ruta del fichero de huella individual o XML de huellas)

mgip commented 3 years ago

El -help todo el mundo lo conoce, aca el problema es que no esta muy documentado. me gustaria ver ejemplos como indicó el amigo @alfem .... Yo tengo el .pfx y un .pdf sin firmar, que es lo que debo de colocar en la consola para firmar el documento ? en probado 1000 formas, y no funciona, me sale de nuevo la ayuda, algo me falta. La interfaz grafica si me funciona, pero es un VPS no tengo interfaz grafica obviamente. Muchas Gracias Amigos.

alfem commented 3 years ago

El -help todo el mundo lo conoce, aca el problema es que no esta muy documentado. me gustaria ver ejemplos como indicó el amigo @alfem .... Yo tengo el .pfx y un .pdf sin firmar, que es lo que debo de colocar en la consola para firmar el documento ? en probado 1000 formas, y no funciona, me sale de nuevo la ayuda, algo me falta.

Como decía arriba, puedes firmar así:

AutoFirma sign -i FICHERO.PDF -o FICHERO-FIRMADO.PDF -store mozilla -filter subject.contains:IDENTIFICADOR

Donde: FICHERO.PDF es el nombre (y el path) del fichero que quieres firmar FICHERO-FIRMADO.PDF es el nombre del fichero que se creará IDENTIFICADOR es algún dato para localizar el certificado que quieres usar para firmar. En mi caso pongo mi NIF (sin puntos), pero también valdría el número de serie del certificado.

Puedes buscar este dato en Mozilla Firefox. Abre Preferencias->Privacidad y Seguridad->Ver Certificados. Hazle doble click a un certificado personal y en la ventana que aparece mira donde dice "Nombre del asunto".

mgip commented 3 years ago

@alfem es que ese es el problema que es un VPS Linux, no tiene GUI. Firefox no esta instalado por lo mismo.

de hecho cuando intento la sintaxis que me dices sale:

Nov 14, 2020 10:50:25 AM es.gob.afirma.keystores.mozilla.MozillaKeyStoreUtilities getMozillaUserProfileDirectory SEVERE: No ha podido determinarse el perfil de usuario de Mozilla, se intentara usar el global: java.io.IOException: No se ha encontrado el fichero con los perfiles de Firefox en: /root/.mozilla/firefox/profiles.ini java.io.IOException: No se ha encontrado el fichero con los perfiles de Firefox en: /root/.mozilla/firefox/profiles.ini at es.gob.afirma.keystores.mozilla.NSPreferences.getFireFoxUserProfileDirectory(NSPreferences.java:46) at es.gob.afirma.keystores.mozilla.MozillaKeyStoreUtilities.getMozillaUserProfileDirectory(MozillaKeyStoreUtilities.java:547) at es.gob.afirma.keystores.mozilla.MozillaKeyStoreUtilities.getMozillaPKCS11Modules(MozillaKeyStoreUtilities.java:291) at es.gob.afirma.keystores.mozilla.MozillaUnifiedKeyStoreManager.getExternalStores(MozillaUnifiedKeyStoreManager.java:222) at es.gob.afirma.keystores.mozilla.MozillaUnifiedKeyStoreManager.init(MozillaUnifiedKeyStoreManager.java:105) at es.gob.afirma.keystores.AOKeyStoreManagerFactory.getNssKeyStoreManager(AOKeyStoreManagerFactory.java:511) at es.gob.afirma.keystores.AOKeyStoreManagerFactory.getMozillaUnifiedKeyStoreManager(AOKeyStoreManagerFactory.java:542) at es.gob.afirma.keystores.AOKeyStoreManagerFactory.getAOKeyStoreManager(AOKeyStoreManagerFactory.java:133) at es.gob.afirma.standalone.CommandLineLauncher.getKsm(CommandLineLauncher.java:706) at es.gob.afirma.standalone.CommandLineLauncher.listAliasesByCommandLine(CommandLineLauncher.java:632) at es.gob.afirma.standalone.CommandLineLauncher.processCommandLine(CommandLineLauncher.java:127) at es.gob.afirma.standalone.CommandLineLauncher.main(CommandLineLauncher.java:794) at es.gob.afirma.standalone.SimpleAfirma.main(SimpleAfirma.java:553)

alfem commented 3 years ago

Si no tienes el certificado en un almacén de Mozilla (podrías copiar el de tu ordenador personal), puedes usar un fichero .p12 cambiando el parámetro -store

AutoFirma sign -i FICHERO.PDF t -o FICHERO-FIRMADO.PDF -store pkcs12:FICHERO_CON_TU_FIRMA.p12 -password CLAVE_DEL_CERTIFICADO -filter subject.contains:IDENTIFICADOR

mgip commented 3 years ago

@alfem he usado el comando keytool para pasar la firma que la tenia en pfx a p12 ... todo bien, pero no sabria cual seria el "IDENTIFICADOR", como puedo saberlo ?

alfem commented 3 years ago

Puedes ver los datos del certificado con openssl o con keytool:

openssl pkcs12 -nokeys -info -in FICHERO.P12 (mira lo que pone junto a subject=)

keytool -list -v -keystore FICHERO.P12 (mira lo que sale junto a Nombre de Alias: )

mgip commented 3 years ago

@alfem La Direccion General de la policia pone a disposicion un DNIe para pruebas informaticas, en mi caso cuando uso Open SSL para consultar la informacion sale lo siguiente:

[root@plesk opt]# openssl pkcs12 -nokeys -info -in new.p12 Enter Import Password: MAC Iteration 100000 MAC verified OK PKCS7 Data Shrouded Keybag: pbeWithSHA1And3-KeyTripleDES-CBC, Iteration 50000 PKCS7 Encrypted data: pbeWithSHA1And40BitRC2-CBC, Iteration 50000 Certificate bag Bag Attributes friendlyName: cn=ficticio activo\, ciudadano (firma), gn=ciudadano, sn=ficticio, serialnumber=99999018d, c=es localKeyID: 54 69 6D 65 20 31 36 30 35 33 34 36 38 37 33 35 30 36 subject=/C=ES/serialNumber=99999018D/SN=Ficticio/GN=Ciudadano/CN=Ficticio Activo, Ciudadano (FIRMA) issuer=/C=ES/O=DIRECCION GENERAL DE LA POLICIA/OU=DNIE/CN=AC DNIE 001 -----BEGIN CERTIFICATE----- MIIFMjCCBBqgAwIBAgIQQzC8xqz+ZGBaxzxSikvqozANBgkqhkiG9w0BAQsFADBc MQswCQYDVQQGEwJFUzEoMCYGA1UECgwfRElSRUNDSU9OIEdFTkVSQUwgREUgTEEg UE9MSUNJQTENMAsGA1UECwwERE5JRTEUMBIGA1UEAwwLQUMgRE5JRSAwMDEwHhcN MTgwNDA2MDkyMjI1WhcNMjEwMjI2MjI1OTU5WjB1MQswCQYDVQQGEwJFUzESMBAG A1UEBRMJOTk5OTkwMThEMREwDwYDVQQEDAhGaWN0aWNpbzESMBAGA1UEKgwJQ2l1 ZGFkYW5vMSswKQYDVQQDDCJGaWN0aWNpbyBBY3Rpdm8sIENpdWRhZGFubyAoRklS TUEpMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvy+Vgy//4S+0tSGT RHgAeK8nzR4xYm5eGWA3LOaVsaF80hfcmwUAhfxGM4zIEhNz2fSIqSf3ckxnzXei rxLlNgjsM+uyCc+xjiF9PaJp3i7HPQ6c8F3VN/ig+0jURgQ4sFd8nymUOqGBsDRT zVlXNW0GbM/R1P4nNR6oQTwSCXZztp6sfWI9HlA2aEqzuxI+wl/ccwMG7mc4O+T5 Jbm7oJ59SNDPceXlmnA1zkHLL1U/2pWqtXevBnD5tD48ywtj1uIqko/vqC4oUV5W OfcYcZFDM9+Y17sCX/ylHNrhI5QIGM7DVMXNYpM6Pnsl/A/bmZ86AdfKqUFrXlDT 2joM5QIDAQABo4IB1TCCAdEwDAYDVR0TAQH/BAIwADAdBgNVHQ4EFgQUtGpuINaP Sc4CPd2yEFF2oGt5w1EwHwYDVR0jBBgwFoAUGomoxe6Pdl1VcYnzOzW9qgUAlW8w gZAGCCsGAQUFBwEDBIGDMIGAMAgGBgQAjkYBATAIBgYEAI5GAQQwEwYGBACORgEG MAkGBwQAjkYBBgEwSAYGBACORgEFMD4wHRYXaHR0cHM6Ly93d3cuZG5pZS5lcy9w ZHMTAmVuMB0WF2h0dHBzOi8vd3d3LmRuaWUuZXMvcGRzEwJlczALBgYEAI5GAQMC AQ8wXwYIKwYBBQUHAQEEUzBRMB8GCCsGAQUFBzABhhNodHRwOi8vb2NzcC5kbmll LmVzMC4GCCsGAQUFBzAChiJodHRwOi8vd3d3LmRuaWUuZXMvY2VydHMvQUMwMDEu Y3J0MH0GA1UdIAR2MHQwcgYIYIVUAQICAgMwZjAiBggrBgEFBQcCARYWaHR0cDov L3d3dy5kbmllLmVzL2RwYzBABggrBgEFBQcCAjA0DDJESVJFQ0NJw5NOIEdFTkVS QUwgREUgTEEgUE9MSUPDjUEsIFZBVEVTLVMyODE2MDE1SDAOBgNVHQ8BAf8EBAMC BkAwDQYJKoZIhvcNAQELBQADggEBAKDWHwOakHTzfcQ+NFrZQW1ymSgglQK8B0TD Jl5CRA0maDcrF1lqiiBTmSQ7yLTCfVnt0mnRxWXSeN5g35CkhGBtqm0PmDdSDn1a ASAx1oU3P8L4LwkZOgWqzK84sz0OJriPBJJIrdSAmFS6kk99lYKw2erLZXuVnXyi 7NEvARw5gp0LJA90WC8BG0UAjc0j2xg6tfU+h4s/OAD6iisWpmHgvYW5WmoTbJ1Z JdYbimBGWjTnf7umTAXhso6W+mugMoVTA/v7Q2a07aT2byrehghrcIlVkAjnd4A7 MXjEXRXrUfKuc+Gumdl8cyftyM3DE7IZtUoX1uPjpwKWizEuafk= -----END CERTIFICATE-----

¿Cual seria el alias?

mgip commented 3 years ago

El kit de pruebas se encuenta aqui

https://www.dnielectronico.es/PortalDNIe/PRF1_Cons02.action?pag=REF_1116&id_menu=68

pardovimes commented 3 years ago

parece que el identificador que necesitas es el numero del documento, yo creo que en tu caso seria el campo serialNumber=99999018D

mgip commented 3 years ago

@pardovimes no lo encuentra :(

[root@plesk opt]# autofirma sign -i test.pdf -o test_signed.pdf -store pkcs12:Ciudadano_ficticio.p12 -alias 99999018d -password 369258 No se hay ninguna entrada en el almacen con el alias indicado: 99999018d [root@plesk opt]#

pardovimes commented 3 years ago

prueba esto

autofirma sign -i test.pdf -o test_signed.pdf -store pkcs12:Ciudadano_ficticio.p12 -password 369258 -filter subject.contains:99999018D

mgip commented 3 years ago

[root@plesk opt]# autofirma sign -i 120520140951280826.pdf -o test_signed.pdf -store pkcs12:new.p12 -password 369258 -filter subject.contains:99999018D La operacion ha terminado correctamente [root@plesk opt]#

FUNCIONA! muchas gracias @pardovimes

A ver si los informaticos de las instituciones se espabilan con la documentacion. :-|

mgip commented 3 years ago

Gracias también @alfem Cualquier cosa, ya sabéis por donde encontrarme :D

alfem commented 3 years ago

Para localizar un certificado concreto, es más fácil y más flexible usar el parámetro filter que el alias. Por eso lo puse como ejemplo.

Me alegro de que por fin te funcione :-)

razorrazor commented 3 years ago

En lugar de usar filter, si conoces el alias también te sirve. Yo en Windows hago:

AutofirmaCommandLine.exe listaliases -store pkcs12:"RUTA_CERTIFICADO"

Te devuelve el alias (como también podrías obtenerlo con el programa Keytool.exe de Java), y ya entonces firmas con:

AutoFirmaCommandLine.exe sign -i "RUTA_FICH_ENTRADA" -o "RUTA_FICH_SALIDA" -format auto -store pkcs12:"RUTA_CERTIFICADO" -password PASS_CERTIFICADO -alias ALIAS_OBTENIDO_ANTERIORMENTE

Lo que todavía no he conseguido es hacer funcionar las opciones del -config para hacer la firma visible. He seguido el tutorial de este enlace, pero no me funciona de ninguna manera, incluso devolviéndome correctamente el fichero ya firmado no es capaz de hacer la firma visible. El enlace que menciono dice que los parámetros del -config deben ir separados con el carácter \n, pero a mi tampoco me funciona así.

¿Alguno lo ha probado con éxito?

joaquinferrero commented 3 years ago

Programa para Bash Shell para firmar documentos desde la línea de comandos, usando las opciones que ofrece AutoFirma.

#!/bin/bash
#
# Script para firmar documentos usando AutoFirma
#
# Joaquín Ferrero. 2022.11.08
# Joaquín Ferrero. 2021.03.06
#
# Ejecutar:
#   Pasar el documento PDF a firmar como parámetro.
#   El resultado es otro documento con una coletilla en el nombre.
#
#    ~/bin/firma_generica.sh Factura_EMPRESA_2022_0534117.pdf
#
# Personalización básica:
# * NIF
# * Nombre del archivo .p12 con la firma digital.
# * Contraseña para acceder a ese archivo.
# * Posición de la firma en la página.
#       Se usa el truco de hacerlo primero con AutoFirma y luego
#       ver qué valores utiliza mirando el final del archivo AUTOFIRMA.afirma.log.xml.
# * Imagen de una firma digitalizada. Opcional.
#       El mismo truco que el anterior.
# * ERROR: No funciona la plantilla $$LOCATION$$, así que está puesto de forma directa.
# * Como no me gustaba el texto por defecto de $$ISSUERCN$$, también lo he puesto directamente.
#

# Leemos el nombre del archivo pdf pasado por línea de comandos
ARCHIVO=$1
# Creamos el nombre del archivo resultado
ARCHIVOFIRMADO="${ARCHIVO/%.pdf/_firmado.pdf}"
#ARCHIVOFIRMADO="${ARCHIVO%.pdf}_firmado.pdf"    # método alternativo por si falla el anterior

### Personalización #######################################################################################
NIF="B47455891"                                 # NIF
DIR='/home/usuario/Documentos/Empresa'          # Ruta al dir. de trabajo
STORE="pkcs12:$DIR/Hacienda/$NIF.p12"           # Ruta al almacén del certificado digital P12
PASSWORD="CONTRASEÑA"                           # Contraseña del archivo de la firma digital
LOCATION="Valladolid"                           # Lugar donde se firma
ISSUERCN="FNMT-RCM"                             # Emisor del certificado

JAVADIR="/usr/lib/java/jdk-11.0.2/bin"          # Ruta al motor Java, si fuera necesario
AUTOFIRMA="/usr/lib/AutoFirma/AutoFirma.jar"    # Ruta al AutoFirma.jar

# Personalizacion de la salida
FORMAT="pades"                                  # Formato para firma de pdf

# Posición de la firma visible
PositionOnPageLowerLeftX='350'                  # Coordenada X Abajo Izquierda
PositionOnPageLowerLeftY='85'                   # Coordenada Y Abajo Izquierda
PositionOnPageUpperRightX='550'                 # Coordenada X Arriba Derecha
PositionOnPageUpperRightY='195'                 # Coordenada Y Arriba Derecha

# Fuente de letras
l2FontColor='black'                             # Color de letra
l2FontSize='7'                                  # Tamaño de letra
l2FontFamily='1'                                # Familia de fuente
l2FontStyle='0'                                 # Estilo de Fuente

# Página
signaturaPage='1'                               # Página donde firmaremos -1=última

# Rúbrica o imagen a añadir, opcional
# Se crea con el comando: base64 -w 0 <archivo> y se copian los datos en base64 en la siguiente variable
#signatureRubricImage='... datos en base64 ...'
# Otra forma: llamar al comando base64 directamente, en todas las ocasiones
signatureRubricImage=$(base64 -w 0 ~/Documentos/Empresa/Firmas/FIRMA_DEL_TESORERO.jpg)

# Personalización de la firma visible en el documento
# Estos son campos que AutoFirma rellenerá
# $$SUBJECTCN$$ Nombre común (CN, Common Name) del titular del certificado de firma
# $$ISSUERCN$$ Nombre común (CN, Common Name) del emisor del certificado de firma
# $$CERTSERIAL$$ Número de serie del certificado de firma
# $$SIGNDATE=PATRÓN$$ Fecha de la firma
# $$GIVENNAME$$ Nombre del titular (G, Given Name) (podría estar vacío)
# $$SURNAME$$ Apellidos del titular (SN, Surname) (podría estar vacío)
# $$ORGANIZATION$$ Organización (O, Organization) (podría estar vacío)
# $$REASON$$ Razón por la que se firma el PDF. (podría estar vacío)
# $$LOCATION$$ Ciudad en la que se firma el PDF. (podría estar vacío)
# $$CONTACT$$ Información de contacto del firmante del PDF. (podría estar vacío)

# Formato del campo de la fecha:
# https://docs.oracle.com/javase/8/docs/api/java/text/SimpleDateFormat.html
#FECHA="EEEE d 'de' MMMM 'de' yyyy, HH:mm:ss"
FECHA="d 'de' MMMM 'de' yyyy, HH:mm:ss"

# Texto que queremos que aparezca en la firma
# Este es un texto libre, pero debe entrecomillarse con comillas simples, ya que contiene caracteres '$'
LAYER2TEXT='En '$LOCATION', el $$SIGNDATE='$FECHA'$$

Firma digital de $$GIVENNAME$$ $$SURNAME$$
          Certificado emitido por '$ISSUERCN' para
$$ORGANIZATION$$'

# Configuración que espera AutoFirma
CONFIG="layer2Text=$LAYER2TEXT\n\
    signaturePositionOnPageLowerLeftX=$PositionOnPageLowerLeftX\n\
    signaturePositionOnPageLowerLeftY=$PositionOnPageLowerLeftY\n\
    signaturePositionOnPageUpperRightX=$PositionOnPageUpperRightX\n\
    signaturePositionOnPageUpperRightY=$PositionOnPageUpperRightY\n\
    layer2FontColor=$l2FontColor\n\
    layer2FontSize=$l2FontSize\n\
    layer2FontFamily=$l2FontFamily\n\
    layer2FontStyle=$l2FontStyle\n\
    signatureRubricImage=$signatureRubricImage\n\
    signaturePage=$signaturaPage"

### Fin de la personalización #############################################################################

# Aquí se hace la firma
# Se puede hacer de varias maneras. Aquí hay dos que he encontrado.
# Escoger aquella que mejor se ajuste al contenido del almacén, y comentar las líneas de la otra solución.

# 1º, con -filter, poner algo que esté dentro del certificado, por ejemplo, el NIF

$JAVADIR/java -jar $AUTOFIRMA sign      \
    -i "$ARCHIVO"                       \
    -o "$ARCHIVOFIRMADO"                \
    -store $STORE                       \
    -format $FORMAT                     \
    -password $PASSWORD                 \
    -filter subject.contains:$NIF       \
    -config "$CONFIG"

echo ""
exit

# 2º, con -alias, para encontrar el certificado dentro del almacén .p12
# primero llamamos a AutoFirma para pedir los alias de un determinado almacén
ALIASES=$($JAVADIR/java -jar $AUTOFIRMA listaliases -store $STORE -password $PASSWORD)

$JAVADIR/java -jar $AUTOFIRMA sign      \
    -i "$ARCHIVO"                       \
    -o "$ARCHIVOFIRMADO"                \
    -store $STORE                       \
    -format $FORMAT                     \
    -password $PASSWORD                 \
    -alias "$ALIASES"                   \
    -config "$CONFIG"

echo ""
exit

# FIN de firma.sh
antonireus commented 3 years ago

Es posible hacer una firma trifásica desatendida?

A diferencia con los comandos sign/cosign/batchsign, al hacer una invocación por protocolo para una firma trifasica, los parámetros -store, -password, -alias, parace que no funcionan...

En nuestro caso tenemos una aplicación que ofrece la posibilidad de firmar con Autofirma, tenemos el servicio de firma trifasica, así como el storageService i el retrieveService, y todo funciona correctamente. Pero querriamos poder tener una prueba de integración para que se ejecute de forma desatendida para no tener que manualmente seleccionar el certificado.

Mediante Selenium/HtmlUnit logro obtenir la URL de la invocación por protocolo, que en nuestro caso seria algo así:

afirma://batch/?fileid=cnrZ99li4Ze4PVsCsTRU&rtservlet=http%3A%2F%2Fmiservidor%2Fsignaturewebtester%2Fplugin%2Fautofirma%2F-1%2FRetrieveService&key=07894758

Puedo lanzar autofirma automaticamente, lanzando el proceso des de mi entorno de pruebas autofirma afirma://..... Pero al hacerlo siempre aparece la selección de certificado de mi almacen. He probado de añadir los parametros -store, -password, -alias... que para una firma desantenida funcionan correctamente, pero cuando autofirma se ejecuta con la llamada por protocolo afirma://batch?...., esos parametros no se tienen en cuenta.

doblejm commented 2 years ago

Estoy realizando un bat script de Windows para firmar una serie de documentos. Para ello realizo un bucle for, para firmar todos los documentos pdf que se encuentran en una determinada carpeta. ..... ..... for %%f in (*.pdf) do (

"C:\Program Files\AutoFirma\AutoFirma\AutoFirmaCommandLine.exe" sign -i %rutasalida%%%f -o %rutasalida%%%f.signed -store windows -filter subject.contains:%nif% -config %CONFIG% )

Funciona correctamente, pero me pide la contraseña del certificado por cada fichero, si hay 5 ficheros, 5 veces hay que meter la contraseña. ¿Hay alguna forma de solo introducir una vez la contraseña y firmar todos los documentos incluidos en el bucle?

joaquinferrero commented 2 years ago

¿Hay alguna forma de solo introducir una vez la contraseña y firmar todos los documentos incluidos en el bucle?

Si te fijas en mi script anterior, uso la opción -password para pasar la contraseña por la línea de órdenes.

doblejm commented 2 years ago

Hola, la opción de -password es para el almacén de certificados. Pero lo que me está pidiendo es la contraseña de la clave privada. He probado a poner la opción -password en el comando pero con el mismo resultado.

Entiendo que si se puede hacer, porque si lo haces en el modo grafico si permite firmar introduciendo una vez la contraseña.

alfem commented 2 years ago

Hola, la opción de -password es para el almacén de certificados. Pero lo que me está pidiendo es la contraseña de la clave privada. He probado a poner la opción -password en el comando pero con el mismo resultado.

Yo probaría a exportar la clave privada a un fichero .p12, y utilizar ese (con su password) para firmar, en lugar del almacén de windows.

doblejm commented 2 years ago

Hola, la opción de -password es para el almacén de certificados. Pero lo que me está pidiendo es la contraseña de la clave privada. He probado a poner la opción -password en el comando pero con el mismo resultado.

Yo probaría a exportar la clave privada a un fichero .p12, y utilizar ese (con su password) para firmar, en lugar del almacén de windows.

Perfecto alfem, de la forma que comentas me funciona correctamente

TapsSan commented 2 years ago

Estoy realizando un bat script de Windows para firmar una serie de documentos. Para ello realizo un bucle for, para firmar todos los documentos pdf que se encuentran en una determinada carpeta. ..... ..... for %%f in (*.pdf) do (

"C:\Program Files\AutoFirma\AutoFirma\AutoFirmaCommandLine.exe" sign -i %rutasalida%%%f -o %rutasalida%%%f.signed -store windows -filter subject.contains:%nif% -config %CONFIG% )

Funciona correctamente, pero me pide la contraseña del certificado por cada fichero, si hay 5 ficheros, 5 veces hay que meter la contraseña. ¿Hay alguna forma de solo introducir una vez la contraseña y firmar todos los documentos incluidos en el bucle?

Hola a todos, despues de leer este post, y probar todo lo que se me ha ocurrido (no tengo muchos conocimientos), se me han acabado las ideas para las pruebas/error. Estoy intentando crear una bat, una la linea de comando para windows para firmar de forma recurrente documentos, pdf, con un certificado digital, instalado. He conseguido firmarlo con un certificado en el almace de mozzilla (me sirve), pero NECESITO, que sea una firma visible....... pues no hay manera de conseguir nada....... solo necesito un pequeño texto al final del la primera pagina del tipo: Firmado digitalmente por Fulanito de Tal 12345678A. y bordarlo sería incluir una imagen, pero NO HAY MANERA, no consigo que aparezca visible NI UNA PALABRA. Antes usaba una utilidad NeeviaPdfTools, va genial, pero por temas de standares oficiales y licencias tengo que quiero pasar a Autofirma, pero NO HAY MANERA......

Alguien ha conseguido algo parecido a lo que necesito, el script de joaquinferrero se me escapa totalmente y no soy capaz de adaptarlo a lo que necesito.

MUUUUCHAS GRACIAS

joansubiros commented 2 years ago

Hola a tod@s, acabo de ver este hilo y es muy interesante. Alguien pude poner un ejemplo de qué se pone después de -config ??? Gracias.

alfem commented 2 years ago

Hola a tod@s, acabo de ver este hilo y es muy interesante. Alguien pude poner un ejemplo de qué se pone después de -config ???

En el script de @joaquinferrero (más arriba) puedes ver un ejemplo de parámetros adicionales para que la firma sea visible en una posición determinada:


CONFIG="layer2Text=$LAYER2TEXT\n\
    signaturePositionOnPageLowerLeftX=$PositionOnPageLowerLeftX\n\
    signaturePositionOnPageLowerLeftY=$PositionOnPageLowerLeftY\n\
    signaturePositionOnPageUpperRightX=$PositionOnPageUpperRightX\n\
    signaturePositionOnPageUpperRightY=$PositionOnPageUpperRightY\n\
    layer2FontColor=$l2FontColor\n\
    layer2FontSize=$l2FontSize\n\
    layer2FontFamily=$l2FontFamily\n\
    layer2FontStyle=$l2FontStyle\n\
    signatureRubricImage=$signatureRubricImage\n\
    signaturePage=$signaturaPage"

Así que este es el tipo de datos que espera el parámetro -config

joansubiros commented 2 years ago

Entonces entiendo que todo el apartado "config" es solamente para visualizar la firma ?¿?¿? No hace nada más ?

Gracias y perdón por mi ignorancia.

alfem commented 2 years ago

En realidad es para todo lo que se le ocurra al desarrollador y no tenga un parámetro específico :-)

joansubiros commented 2 years ago

En realidad es para todo lo que se le ocurra al desarrollador y no tenga un parámetro específico :-)

sí, pero en qué lenguage ? o qué lista de opciones hay ? qué lista de parámetros ? Gracias

lortane commented 2 years ago

Buenas noches,

Ubuntu 20

¿Alguien sabe cómo hacer para que use un campo asignado para firma del PDF desde la línea de comandos?

En el GUI, únicamente tengo que marcar las casillas de "Hacer la firma visible dentro del PDF" e "Insertar una marca visible dentro del PDF" y una vez clico en firmar, me aparece un diálogo donde tengo que seleccionar el campo en el que se inserta la firma visible. Lo selecciono, clico en "Usar campo seleccionado" y ya está. Alguien sabe cómo replicar esto en el CMD?

Gracias y un saludo

Screenshot from 2022-09-13 21-55-02

alfem commented 2 years ago

¿Alguien sabe cómo hacer para que use un campo asignado para firma del PDF desde la línea de comandos?

¿Has probado a firmar desde linea de comando sin indicar las coordenadas?

lortane commented 2 years ago

Sí, la firma es invisible, de la misma forma que si no hubiese un campo.

joansubiros commented 1 year ago

Hola a todos. Ya he conseguido hacerlo por línea de comando. Lo que ocurre que me da algún error pero lo hace. Es decir, obtengo el pdf, firmado con el certificado, pero igual el resultado me da errores. Sabéis qué puede ser ?? Gracias de antemano.

Linea de comando: cmd.exe /c "AutoFirmaCommandLine.exe" sign -i d:\prova.PDF -o d:\prova_signed.PDF -store windows -alias subi

Errores: WARNING: An illegal reflective access operation has occurred WARNING: Illegal reflective access by net.sf.jmimemagic.MagicParser (file:/C:/Program%20Files/AutoFirma/AutoFirma/AutoFirmaCommandLine.exe) to constructor com.sun.org.apache.xerces.internal.parsers.SAXParser() WARNING: Please consider reporting this to the maintainers of net.sf.jmimemagic.MagicParser WARNING: Use --illegal-access=warn to enable warnings of further illegal reflective access operations WARNING: All illegal access operations will be denied in a future release

La operacion ha terminado correctamente

ceferra commented 1 year ago

Mil gracias @joaquinferrero por el script. Es fantástico! En Linux me daba un error la línea ARCHIVOFIRMADO="${ARCHIVO/.pdf/_signed.pdf}" # Nombre resultado Lo he cambiado por: ARCHIVOFIRMADO="${ARCHIVO%.pdf}_signed.pdf" # Nombre resultado El resto todo correcto.

joaquinferrero commented 1 year ago

Muchas gracias a ti, @ceferra por usarlo. Seguramente sea debido a la versión del shell bash que estés usando. He incorporado tu solución al script.

He reeditado mi script, para corregir faltas de ortografía, poner más comentarios, hacer más fácil la personalización, describir mejor cómo poner la rúbrica en base64... pero fundamentalmente sigue siendo el mismo.

eescrihuela commented 1 year ago

Saludos, utilizo ubuntu 18 y he probado con oracle java (versiones 1.8, 11, 17) y no hay manera de poder firmar con formato XADES un pdf y falla. En cambio con CADES no falla

el comando que uso es:

/usr/bin/AutoFirma sign -i /home/yo/doc1.pdf -o /home/yo/firma.xsig -format xades -store pkcs12:/home/yo/micert.p12 -alias epn1 -password mipassword

y da este error _[Fatal Error] :1:1: Content is not allowed in prolog. WARNING: An illegal reflective access operation has occurred WARNING: Illegal reflective access by net.sf.jmimemagic.MagicParser (file:/usr/lib/AutoFirma/AutoFirma.jar) to constructor com.sun.org.apache.xerces.internal.parsers.SAXParser() WARNING: Please consider reporting this to the maintainers of net.sf.jmimemagic.MagicParser WARNING: Use --illegal-access=warn to enable warnings of further illegal reflective access operations WARNING: All illegal access operations will be denied in a future release de gen. 12, 2023 11:00:32 A. M. es.gob.afirma.signers.xades.XAdESUtil SEVERE: No se ha podido establecer la propiedad de seguridad en la factoria XML java.lang.IllegalArgumentException: Property 'http://javax.xml.XMLConstants/property/accessExternalStylesheet' is not recognized. at java.xml/com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderFactoryImpl.setAttribute(DocumentBuilderFactoryImpl.java:114) at es.gob.afirma.signers.xades.XAdESUtil.(XAdESUtil.java:97) at es.gob.afirma.signers.xades.XAdESSigner.sign(XAdESSigner.java:602) at es.gob.afirma.signers.xades.AOXAdESSigner.sign(AOXAdESSigner.java:405) at es.gob.afirma.standalone.CommandLineLauncher.sign(CommandLineLauncher.java:797) at es.gob.afirma.standalone.CommandLineLauncher.signByCommandLine(CommandLineLauncher.java:624) at es.gob.afirma.standalone.CommandLineLauncher.processCommandLine(CommandLineLauncher.java:152) at es.gob.afirma.standalone.CommandLineLauncher.main(CommandLineLauncher.java:1006) at es.gob.afirma.standalone.SimpleAfirma.main(SimpleAfirma.java:573)

SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder". SLF4J: Defaulting to no-operation (NOP) logger implementation SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details._

eescrihuela commented 1 year ago

Otra cosa, para firmar con Xades internally detached,¿Que opciones debo indicar en la línea de comandos en ubuntu?

naudor commented 1 year ago

Buenas gente. Después de espiar vuestra conversación en gitHyb y de repasar el manual del integrador sigo teniendo muchas dudas sobre la firma en batch. Tengo que poder firmar varios ficheros PDF a la vez con la misma firma comandos de consola en un ordenador con windows. He conseguido firmar un documento con el parámetro "sign" pero con el batch está siendo bastante problemático.

Estoy ejecutando lo siguiente: autofirmacommandline batchsign -i c:\LIMS\multifirma\operacions.xml -o c:\LIMS\multifirma\resultat.xml -filter subject.contains: -preurl http://www.google.com -posturl http://www.google.com

Como veréis me obliga a especificar una preURL y una postURL pero no tengo ningun servicio al que llamar ni antes ni después. El caso es que aunque no me muestra ningun error, tampoco me genera el fichero de salida "resultats.xml" ni veo que los PDF especificados en el fichero "operacions.xml" estén firmados.

Alguien me podria decir donde encontrar los ficheros de logs? El único que he visto es el AUTOFIRMA.afirma.log.xml pero solo aparecen mensajes de las ejecuciones con la interfaz grafica, pero nada de cuando ejecuta la firma batch por consola.

Por si fuera necesario os comparto el fichero de configuración que estoy usando

<?xml version="1.0" encoding="UTF-8" ?>

QzpcTElNU1xtdWx0aWZpcm1hXExhYlggU29mdHdhcmUgVXBkYXRlLnBkZg== XAdES sign ImxheWVyMlRleHQ9U2lnbmF0IHBlciAkJFNVQkpFQ1RDTiQkIGVsIGRpYSAkJFNJR05EQVRFPWRkL01NL3l5eXkkJCBhbWIgY2VydGlmaWNhdCBlbcOocyBwZXIgJCRJU1NVRVJDTiQkXG5zaWduYXR1cmVQYWdlPTFcbnNpZ25hdHVyZVBvc2l0aW9uT25QYWdlTG93ZXJMZWZ0WD0xMDBcbnNpZ25hdHVyZVBvc2l0aW9uT25QYWdlTG93ZXJMZWZ0WT0yMDBcbnNpZ25hdHVyZVBvc2l0aW9uT25QYWdlVXBwZXJSaWdodFg9MzAwXG5zaWduYXR1cmVQb3NpdGlvbk9uUGFnZVVwcGVyUmlnaHRZPTMwMFxubGF5ZXIyRm9udFNpemU9NlxubGF5ZXIyRm9udENvbG9yPWRhcmtHcmF5XG5sYXllcjJGb250RmFtaWx5PTBcbmxheWVyMkZvbnRTdHlsZT0wXG5zaWduYXR1cmVSb3RhdGlvbj0wIg== es.gob.afirma.signers.batch.SignSaverFile RmlsZU5hbWU9QzpcTElNU1xtdWx0aWZpcm1hXERPQ19GSVJNQVQueG1s QzpcTElNU1xtdWx0aWZpcm1hXGxsaWNlbmNpZXMgTWV0dGxlciBMYWJYLnBkZg== CAdES sign ImxheWVyMlRleHQ9U2lnbmF0IHBlciAkJFNVQkpFQ1RDTiQkIGVsIGRpYSAkJFNJR05EQVRFPWRkL01NL3l5eXkkJCBhbWIgY2VydGlmaWNhdCBlbcOocyBwZXIgJCRJU1NVRVJDTiQkXG5zaWduYXR1cmVQYWdlPTFcbnNpZ25hdHVyZVBvc2l0aW9uT25QYWdlTG93ZXJMZWZ0WD0xMDBcbnNpZ25hdHVyZVBvc2l0aW9uT25QYWdlTG93ZXJMZWZ0WT0yMDBcbnNpZ25hdHVyZVBvc2l0aW9uT25QYWdlVXBwZXJSaWdodFg9MzAwXG5zaWduYXR1cmVQb3NpdGlvbk9uUGFnZVVwcGVyUmlnaHRZPTMwMFxubGF5ZXIyRm9udFNpemU9NlxubGF5ZXIyRm9udENvbG9yPWRhcmtHcmF5XG5sYXllcjJGb250RmFtaWx5PTBcbmxheWVyMkZvbnRTdHlsZT0wXG5zaWduYXR1cmVSb3RhdGlvbj0wIg== es.gob.afirma.signers.batch.SignSaverFile RmlsZU5hbWU9QzpcTElNU1xtdWx0aWZpcm1hXERPQ19GSVJNQVRfMi54bWw=

Muchas gracias por vuestro tiempo

MarcoUCM commented 1 year ago

Buenas noches,

Ubuntu 20

¿Alguien sabe cómo hacer para que use un campo asignado para firma del PDF desde la línea de comandos?

En el GUI, únicamente tengo que marcar las casillas de "Hacer la firma visible dentro del PDF" e "Insertar una marca visible dentro del PDF" y una vez clico en firmar, me aparece un diálogo donde tengo que seleccionar el campo en el que se inserta la firma visible. Lo selecciono, clico en "Usar campo seleccionado" y ya está. Alguien sabe cómo replicar esto en el CMD?

Gracias y un saludo

Screenshot from 2022-09-13 21-55-02

Un poco tarde, seguramente, pero lo que estás buscando (para firmar PDFs al menos) es

-config "signatureField=Firma"

La pista la he encontrado aquí: https://github.com/ctt-gob-es/clienteafirma/blob/master/afirma-crypto-pdf/src/main/java/es/gob/afirma/signers/pades/doc-files/extraparams.html

Domingo-Gomez-Perez commented 2 days ago

Perdona que os moleste, pero ¿como se hace para firmar todas las páginas?

joansubiros commented 2 days ago

Hola a tod@s. Estoy intentando usar línea de comandos en un MacOS, pero no hay forma. El terminal de Mac, no detecta "autofirmacommandline". Alguien me puede ayudar ? Gracias. Dejo mi e-mail: jsubiros@hotmail.com

MarcoUCM commented 2 days ago

Perdona que os moleste, pero ¿como se hace para firmar todas las páginas?

Con la firma digital se firma el fichero completo y se añade la firma en los metadatos por lo que no es necesario lo de firmar todas las páginas. Es cierto que Autofirma permite hacer visible en el PDF un "testigo" de la firma, pero lo importante no es eso si no los metadatos.

Hasta donde yo sé, y por las pruebas que he hecho, si quieres un "testigo" en cada hoja, tendrás que firmar digitalmente el documento varias veces. Pero eso no tiene mucho sentido pues entonces en los metadatos aparecerá la firma digital una y otra vez.

MarcoUCM commented 2 days ago

Hola a tod@s. Estoy intentando usar línea de comandos en un MacOS, pero no hay forma. El terminal de Mac, no detecta "autofirmacommandline". Alguien me puede ayudar ? Gracias. Dejo mi e-mail: jsubiros@hotmail.com

Hola,

En MacOS no lo sé, pero en Linux el ejecutable parece ser "AutoFirma" y no "autofirmacommandline". Prueba con ese a ver...

Suerte

Domingo-Gomez-Perez commented 1 day ago

Primero de todo @MarcoUCM muchas gracias por responder tan rápido.

Perdona que os moleste, pero ¿como se hace para firmar todas las páginas?

Con la firma digital se firma el fichero completo y se añade la firma en los metadatos por lo que no es necesario lo de firmar todas las páginas. Es cierto que Autofirma permite hacer visible en el PDF un "testigo" de la firma, pero lo importante no es eso si no los metadatos.

Hasta donde yo sé, y por las pruebas que he hecho, si quieres un "testigo" en cada hoja, tendrás que firmar digitalmente el documento varias veces. Pero eso no tiene mucho sentido pues entonces en los metadatos aparecerá la firma digital una y otra vez.

En la interfaz, cuando firmo, me deja la opción de poner el testigo en todas las hojas.

Captura
Domingo-Gomez-Perez commented 1 day ago

Hola a tod@s. Estoy intentando usar línea de comandos en un MacOS, pero no hay forma. El terminal de Mac, no detecta "autofirmacommandline". Alguien me puede ayudar ? Gracias. Dejo mi e-mail: jsubiros@hotmail.com

Hola,

En MacOS no lo sé, pero en Linux el ejecutable parece ser "AutoFirma" y no "autofirmacommandline". Prueba con ese a ver...

Suerte

Yo tengo MacOs y este es el comando que pongo en mi .zshrc: alias signblank='function _signblank() { java -jar /Applications/AutoFirma.app/Contents/Resources/JAR/AutoFirma.jar sign -i "$1" -o "$2" -store mac -filter "NOMBRECLAVE"; }; _signblank'

El comando sería java -jar /Applications/AutoFirma.app/Contents/Resources/JAR/AutoFirma.jar sign -I "entrada.pdf" -o "salida.pdf" -store mac -filter "NOMBRECLAVE"

joansubiros commented 1 day ago

Hola a tod@s. Estoy intentando usar línea de comandos en un MacOS, pero no hay forma. El terminal de Mac, no detecta "autofirmacommandline". Alguien me puede ayudar ? Gracias. Dejo mi e-mail: jsubiros@hotmail.com

Hola, En MacOS no lo sé, pero en Linux el ejecutable parece ser "AutoFirma" y no "autofirmacommandline". Prueba con ese a ver... Suerte

Yo tengo MacOs y este es el comando que pongo en mi .zshrc: alias signblank='function _signblank() { java -jar /Applications/AutoFirma.app/Contents/Resources/JAR/AutoFirma.jar sign -i "$1" -o "$2" -store mac -filter "NOMBRECLAVE"; }; _signblank'

El comando sería java -jar /Applications/AutoFirma.app/Contents/Resources/JAR/AutoFirma.jar sign -I "entrada.pdf" -o "salida.pdf" -store mac -filter "NOMBRECLAVE"

Hola de nuevo @Domingo-Gomez-Perez y muchas gracias por tu comentario. Quería preguntarte lo siguiente:

Tengo instalado autofirma 1.8.4 y me salta un error que igual es inocuo no lo sé, que me dice que la versión java 21.0.4 no está soportada.

Por otro lado el "NOMBRECLAVE" dónde lo puedo ver ? en Llaveros pero qué campo es ?

Gracias de antemano.