jueves, 25 de julio de 2019

Autofirma, Ubuntu 18.04. Perdida de certificados. Ejecucion en consola de Autofirma. Diferentes resultados de firma

0. Introducción

Cuando se instala una nueva vetrsión de Java o se actualiza Ubuntu, se pueden perder los certificados instalados en Mozilla, y por tanto se pierden los certificados de Autofirma.

1. Verificar que Mozilla tenga los certificados cargados:


En Preferencias->Seguridad y privacidad ->Ver certificados me ha aparecido una panntalla que no ha aparecido ningún certificado ni parecía el botón de importar.
La solución es tan tonta como ampliar la pantalla arrantrando como indica la flecha y ahora ya se pueden importar certificados p12 pues ya aparece el botón de importar




2. Restaurar instalación de Autofirma


Si  no aparece el certificado en Autofirma, hay que restaurar la instalación. Para ello entramos en Autofirma ->Herramientas->Reestaurar instalación

Y nos pide salir del navegador si está abierto.

Ojo solo funciona con java 1.8, por tanto hay que buscar la ruta de instalación de java 1.8 y modificar el fichero /usr/bin/Autofirma para que contenga


1
2
3
#!/bin/bash
# java -jar /usr/lib/AutoFirma/AutoFirma.jar $*
/usr/lib/jvm/java-8-oracle/jre/bin/java  -jar /usr/lib/AutoFirma/AutoFirma.jar $*

Donde la última línea indica la llamada a java con la ruta absoluta del jdk 1.8

En teroría ya debería encontrar los certificados

3. Ejecutar Autofirma desde la línea de comandos


Como se dice muy bien el Atareado se puede utilizar en línea de comandos. Os copio lo que el ha hecho a falta de probarlo. De momento yo no lo he podido hacer funcionar por no saber mi alias


1
2
3
4
5
#firmar un documento pdf
AutoFirma sign -i entrada.pdf -o salida.pdf -store pkcs12:/home/lorenzo/Escritorio/certificado.p12 -alias firma -password micontreña

#firmar los documentos pdf de una carpeta
for i in entrada_*.pdf; do AutoFirma sign -i $i -o ${i/.pdf/}_signed.pdf -store pkcs12:/home/lorenzo/Escritorio/certificado.p12 -alias firma -password micontraseña; done


Pero si miramos el manual de Autofirma, vemos que si se puede obtener el alias e incluso utilzar otros almacenes de claves.

Si ejecutamos desde /usr/bin:

./Autofirma cmd -help

obtenemos:


 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
Comandos cmd:

  sign   (firma de fichero)
  cosign  (cofirma de fichero)
  countersign  (contrafirma de fichero)
  listaliases  (lista los alias disponibles en el almacen)
  verify  (abre un panel con la informacion de validacion de una firma o certificado)

  batchsign  (firma/multifirma de lotes de ficheros)

  createdigest  (creacion de huella digitales con interfaz grafica)

  checkdigest  (comprobacion de huella digitales con interfaz grafica)

Y si le damos a la ayuda de firmar

./Autofirma sign -help

obtenemos:


 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
Sintaxis: AutoFirma sign [options...]

options

  -gui    (Realiza la operacion con entorno grafico)
  -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   (Seleccion de formato en base al fichero de entrada)
    cades   (Formato CAdES)
    pades   (Formato PAdES)
    xades   (Formato XAdES)
    facturae  (Firma de factura electronica)
  -config extraParams  (Properties en texto plano con la configuracion de la operacion)
  -store   (Establece el almacen de claves. Por defecto, el del sistema)
    auto   (Almacen de claves del sistema)
    windows  (Almacen de claves de Windows)
    mac   (Almacen de claves de Mac OS X)
    mozilla  (Almacen de claves de Mozilla Firefox)
    dni   (DNI electronico)
    pkcs12:p12file  (Almacen PKCS#12. "p12file" es la ruta del almacen)
    pkcs11:p11file  (Almacen PKCS#11. "p11file" es la ruta del controlador)
  -password password  (Establece la contrasena del almacen)
  -alias alias   (Alias del certificado de firma)
  -filter filter  (Filtro para seleccionar el certificado de firma)
  -xml    (Formatea la respuesta como XML)

Y si le damos a la ayuda de ver los alias:


./Autofirma listaliases -help


obtenemos:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
Sintaxis: AutoFirma listaliases [options...]

options

  -store   (Establece el almacen de claves. Por defecto, el del sistema)
    auto   (Almacen de claves del sistema)
    windows  (Almacen de claves de Windows)
    mac   (Almacen de claves de Mac OS X)
    mozilla  (Almacen de claves de Mozilla Firefox)
    dni   (DNI electronico)
    pkcs12:p12file  (Almacen PKCS#12. "p12file" es la ruta del almacen)
  -password password  (Establece la contrasena del almacen)
  -xml    (Formatea la respuesta como XML)


Veamos pues alguna de las diferentes opciones de firma

3.1 Utilizar el almacén de certificados de Mozilla

Primerament debemos obtener el ALIAS. desde /usr/bin ejecutamos:


1
./AutoFirma  listaliases -store mozilla

Nos devuelve:


 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
de jul. 26, 2019 8:51:26 AM es.gob.afirma.keystores.mozilla.MozillaKeyStoreUtilities loadNSS
INFO: Configuracion de NSS para SunPKCS11:
name=NSSCrypto-AFirma
library=/usr/lib/thunderbird/libsoftokn3.so
attributes=compatibility
slot=2
showInfo=false
allowSingleThreadedModules=true
nssArgs="configdir='sql:/USERHOME/.mozilla/firefox/fofoapzr.default-release' certPrefix='' keyPrefix='' flags='readOnly'"
de jul. 26, 2019 8:51:26 AM es.gob.afirma.keystores.mozilla.MozillaKeyStoreUtilities loadNssJava8
INFO: NSS necesita una precarga o tratamiento de sus dependencias: java.lang.reflect.InvocationTargetException
de jul. 26, 2019 8:51:26 AM es.gob.afirma.keystores.mozilla.MozillaKeyStoreUtilities loadNSS
INFO: Proveedor PKCS#11 para NSS anadido: SunPKCS11-NSSCrypto-AFirma
de jul. 26, 2019 8:51:26 AM es.gob.afirma.keystores.AOKeyStoreManager init
INFO: Inicializamos el almacen de tipo: DNIe y tarjetas FNMT-TIF
de jul. 26, 2019 8:51:26 AM es.gob.afirma.keystores.KeyStoreUtilities addPreferredKeyStoreManagers
INFO: No se ha encontrado un DNIe: java.security.ProviderException: No se ha podido inicializar el proveedor de DNIe: es.gob.jmulticard.apdu.connection.NoReadersFoundException: No se detectaron lectores de tarjetas en el sistema
de jul. 26, 2019 8:51:26 AM es.gob.afirma.keystores.mozilla.MozillaKeyStoreUtilities getMozillaPKCS11Modules
INFO: Se incluiran los modulos nativos de DNIe/CERES si se encuentran configurados
de jul. 26, 2019 8:51:26 AM es.gob.afirma.keystores.mozilla.MozillaKeyStoreUtilities getMozillaPKCS11Modules
INFO: Obtenidos los modulos externos de Mozilla desde 'pkcs11.txt'
de jul. 26, 2019 8:51:26 AM es.gob.afirma.keystores.mozilla.MozillaUnifiedKeyStoreManager init
INFO: No se han encontrado modulos PKCS#11 externos instalados en Firefox
EPN1

Y en la línea 24 vemos "EPN1" que es el alias en cuestión.

Ahora nos toca firmar:


1
./AutoFirma  sign -i /home/ximo/xml/xml1.xml -o /home/ximo/xml/xmlq_firma.xsig -format xades -store mozilla -alias EPN1

3.2 Utilizar un fichero "p12" como almacén de certificados
Primerament debemos obtener el ALIAS. desde /usr/bin ejecutamos:


1
./AutoFirma  listaliases -store pkcs12:/home/ximo/certs/mycert.p12 -password myPassword

Nos devuelve simplemente "epn1" que es nuestro alias en cuestión.


También hubieramos podido utilizar keytool  como se dice en Stackoverflow:

1
keytool -v -list -storetype pkcs12 -keystore /home/ximo/certs/mycert.p12 -storepass myPassword

y saldría:

1
2
3
4
5
6
Keystore type: PKCS12
Keystore provider: SUN

Your keystore contains 1 entry

Alias name: epn1

Con lo que el alias resultante es el mismo.

Ahora desde /usr/bin intentamos firmar:


1
./AutoFirma  sign -i /home/ximo/xml/xml1.xml -o /home/ximo/xml/xml1_firma1.xsig -format xades -store pkcs12:/home/ximo/certs/mycert.p12 -alias epn1 -password myPassword


Y obtenemos el mismo resultado.

4. Diferentes formatos de firma al ejecutar en "GUI" y línea de comandos

Hay alguna sutileza que trae como consecuencia que los formatos de salida sean ligeramente distintos.

Veamos una imagen donde se ve que la estructura de la firma es prácticamente la misma pero cambia la localizaciíon del contenido a firmar.

La parte de arriba corresponde a una firma en línea de comandos y la de la parte de abajo desde la opción "GUI" (graphic user interface).

Se remarca los contenidos a firmar.


Si se intentan validar los ficheros con Autofirma (Archivo-> Ver Firma) se observa que ambos ficheros son correctos.


No hay comentarios :

Publicar un comentario