jueves, 23 de agosto de 2018

Maven (1) Crear, compilar y ejecutar proyectos java

0. Introducción


Esta no va a ser una entrada estándar. Se van a poner enlaces para su aprendizaje, solo se indica esquemáticamente las ideas.

1. Etiquetas principales del POM


No vamos a hablar de la instalación de Maven ya gracias al plugin de Eclipse.

En Baeldung Maven-1 hay una magnífica introducción a Maven, aprendemos las etiquetas básical sel POM (project object model):

  • Identificativos del proyecto: groupId (grupo de proyectos), artifactId (nombre único del proyecto), version(1.0-SNAPCHOT, 3.2, etc), packaging (war, zip, jar).
  • Dependencias (ver Baeldung Maven-2): En una dependencia (<dependency>)definimos los identificativos del proyecto de la dependencia (groupId, artifactId, versión) junto al alcance (scope) y el tipo (type). Los scope (<scope>)pueden ser compile (por omisión, que son las que se incluyen en el classpath), el scope provided (cuya dependencia está suministrada por el JDK, o container), el scope runtime (que se deben suministrar en tiempo de ejecución, como los JDBC),  el scope test (que solamente estan presentes en tests y classpaths de ejecución), el scope import (para dependenias de tipo pom, en que las dependencias efectivas se sustituyen por las indicadeas en la referencia al pom),y el scope system (donde la dependencia está guardada en el sistema, y por tanto al exportar el proyecto, hay que adjuntar esta dependencia o por el contrario el programa no correrá)
  • Repositorios (<repository>), pueden haber  varios repositorios. Lo normal es que se guarden en Maven Central, pero por ejemplo JBOSS tiene su repositorio. Hay que indicar id y url.
  • Propiedades (<property>) donde se definen rutas, versiones etc y se referencian con el tag.
  • Build (<build>) Suministra información sobre el objetivo principal (<defaultGoal>), el directorio del programa compilado (<directory>, que por omisión es target), el nombre final de la aplicación (<finalName>) y ... (El build puede estar también dentro de un perfil que se explica a continuación)
  • Perfiles (<profile>), que son un conjunto de valores de configuración. Se pueden tener para producción, desarrollo etc, para ello hay que indicar el id (<id>), si están activados por omisión (<activeByDefault>), build(<build>) con sus plugins etc.
Si queremos ejecutar un perfil se hace desde la línea de comandos

mvn clean install -PmiPerfil     

siendo  miPerfil el nombre de perfil que hemos definido. en Eclipse con el boton derecho sobre el pom.xml se escoge "maven build ..." y se indica en Goals todo lo que hay despúes del comando mvn 




2. Ciclo de vida del Build de Maven


Se pueden ejecutar varios objetivos (goals) del ciclo de vida. Veamos las fases del ciclo de vida
  • validate: Comprueba que el proyecto se correcto.
  • compile: compila el código fuente en artefactos (artifacts) binarios
  • test: ejecuuta los "unit tests"
  • package: empaqueta el código compilado en un archivo (jar, war , zip...)
  • integration-test: ejecuta tests adoicionales que requieren el empaquetado
  • verify: comprueba si el paquete es válido
  • install: instala el paquete (fichero) en el repositorio Maven local
  • deploy: despliegael paquete en un servidor remoto o repositorio.
Un plugin es un conjunto de uno o mas goals. Los goals se ejecutan en fases. Por ejemplo clean es un plugin que limpia los builds anteriores.

Para ejecutar una fase cualquiera (no poner los "<" ">")

mvn <phase>


3. Generar un proyecto java simple


Creamos un proyecto maven en Eclipse o ejecutamos en linea de comandos:


mvn archetype:generate
  -DgroupId=org.grupo
  -DartifactId=org.grupo.subgrupo 
  -DarchetypeArtifactId=maven-archetype-quickstart
  -DinteractiveMode=false

Por omisión la versión que crea es 1.0-SNAPSHOT y tambien crea la dependencia de junit. Genera ese pom.xml


<project>
    <modelVersion>4.0.0</modelVersion>
    <groupId>org.grupo</groupId>
    <artifactId>org.grupo.subgrupo</artifactId>
    <packaging>jar</packaging>
    <version>1.0-SNAPSHOT</version>
    <name>org.grupo.subgrupo</name>
    <url>http://maven.apache.org</url>
    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.1.2</version>
            <scope>test</scope>
        </dependency>
    </dependencies>
</project>


4. Compilar y empaquetar el proyecto


Ejecutamos

mvn compile  para compilar

mvn test para hacer solo los test

mvn package para crear un jar

5. Compilar y ejecutar mediante plugins

Para simplificar, en el <build> se utilizan 2 plugins,. el primero es estandard de maven (compiler) y se usa para definir la versión de java 1.8 . El segundo plugin es casi estandar (de codehaus.org o MojoHaus) que se llama exec en el cual definimos la clase que contiene el main (<mainClass>)


<build>
    <sourceDirectory>src</sourceDirectory>
    <plugins>
        <plugin>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.6.1</version>
            <configuration>
                <source>1.8</source>
                <target>1.8</target>
            </configuration>
        </plugin>
        <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>exec-maven-plugin</artifactId>
            <version>1.5.0</version>
            <configuration>
                <mainClass>org.proyecto.subproyecto.App</mainClass>
            </configuration>
        </plugin>
    </plugins>
</build>

Y se ejecuta con

mvn exec:java


lunes, 20 de agosto de 2018

Destripando Autofirma MALO

0. Introducción

NO HAGAIS CASO A ESTA ENTRADA. EN UN FUTURO PÓXIMO ESTA PREVISTA SU ARREGLO. DE MOMENTO ESTA EN CONSTRUCCIÓN.

Queremos ver la última versin de AutoFirma o @Firma.

Para ello abrimos la vista de Git- Git Repositories y un uno de los iconos "clone a Git Repository and add a copy to this view", accedemos al repositorio de ctt-cliente @firma:

https://github.com/ctt-gob-es/clienteafirma

Lo copiamos e importamos todos los proyectos. (File-Import-Git-Projects from Git) y los importamos.

Leemos el Readme, y dice que hay que hacer

mvn clean install -Denv=install

Para ello botón derecho sobre el proyecto, Run As, Maven Build ... , y en Goals metemos

clean install -Denv=install

y le damos y nos da un error que no puede encontrar la librería

<groupId>es.gob.afirma.lib</groupId>
<artifactId>afirma-lib-jmimemagic</artifactId>
<version>0.0.5-SNAPSHOT</version>

Si nos fijamos en Maven Central aparec la version 0.0.3 y la 0.04 pero la 0.0.5.SNAPSHOT NO.

1. Solución


Estas dependencias están en otro repositorio:

https://github.com/ctt-gob-es/clienteafirma-external

Para ello tenemos que clonar el repositorio citado e importar cada uno de los proyectos que tiene.

Después hay que abrir las carpetas y buscar cada pom.xml y con el boton derecho Run As-maven Install y se instalarán dichas dependencias en un repositorrio local nuestro.

Ahora cuando ejecutems otra vez al proyecto original y le demos a

clean install -Denv=install

y ahí me quedo sin solucionar la cosa

jueves, 16 de agosto de 2018

Ubuntu 16: Autofirma(I). Repaso a variables de entorno

1. Introducción

Ya tenemos configurada nuestra tarjeta ACCV junto con el lector Zoweetek. Ahora debemos instalar autofirma. Vamos a seguir estos pasos

2. Descarga

Descargamos la útima versión para linux de esta URL oficial. Y la copiamos en una carpeta.


3. Analizar la descarga

Tenemos un fichero comprimido en formato "zip" que contiene 2 PDFs y un fichero de texto. Los 2 primeros son instruciones de instaación y configurtación y el fichero de texto nos indica las mejoras y solución de bugs de las últimas versiones

Parece ser que se da compatibilidad a la versión de Java 9. Las instrucciones se explican para java 8, pero yo tengo instalado Java 10. Por tanto, sabiendo los problemas que da Java 9, me paso a la instalación con Java 8.

Tengo las 3 versiones de Java instaladas (8, 9 y 10) , pero tengo configurado el sistema para usar java 10.

4. Dejar a java 8 por omisión.

Hay que documentar este paso, ya que pronto o tarde tendremos que volver a dejar el sistema tal y como estaba con Java 10.

4.1 Primero veamos las "alternatives"



sudo update-alternatives --config java

Que nos devuelva la siguiente información


Hi ha 6 possibilitats per a l'alternativa java (que proveeix /usr/bin/java).

  Selecció    Camí                                           Prioritat  Estat
------------------------------------------------------------
  0            /usr/lib/jvm/java-10-oracle/bin/java             1091      mode automàtic
  1            /home/eduard/ProgramesMeus/jdk-10.0.1/bin/java   1         mode manual
  2            /usr/lib/jvm/java-10-openjdk-amd64/bin/java      1         mode manual
  3            /usr/lib/jvm/java-10-oracle/bin/java             1091      mode manual
* 4            /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java   1081      mode manual
  5            /usr/lib/jvm/java-9-openjdk-amd64/bin/java       1091      mode manual
  6            /usr/lib/jvm/java-9-oracle/bin/java              1091      mode manual

Premeu retorn per a mantenir l'opció per defecte[*], o introduïu un número de selecció: 3
update-alternatives: s'està emprant /usr/lib/jvm/java-10-oracle/bin/java per a proveir /usr/bin/java (java) en mode manual

Elegimos la opción 4 para mi java 8

4.2 Cambiar las variables de entorno JAVA_HOME y PATH

Si ejecutamos

echo $JAVA_HOME

aparece

/usr/lib/jvm/java-10-oracle

Por tanto debemos cambiarla para que aparezca Java 8 y no Java 10

Antes de cambiar dicha variable, debemos saber donde se le da el valor. Según Stack.Exchange  podemos averiguarlo tecleando estas opciones hasta encontrar dicha variable:


grep JAVA_HOME  ~/.bash_profile ~/.bash_login ~/.profile ~/.bashrc

grep JAVA_HOME /etc/environment /etc/bash.bashrc /etc/profile.d/* /etc/profile

grep -r JAVA_HOME /etc

grep -r JAVA_HOME ~/

en mi caso, la primera opción me localizó dicha variable en 2 ficheros situados en /home/miusuario (siendo miusuario el nombre de usuario que me he conectado al sistema) que son .profile y .bashrc pero dichar referencia aparece comentada con una almohadilla "#". Por tanto no nos sirve.

Para el segundo comando, aparece


/etc/profile.d/jdk.csh:setenv JAVA_HOME /usr/lib/jvm/java-10-oracle
/etc/profile.d/jdk.sh:export JAVA_HOME=/usr/lib/jvm/java-10-oracle

Por tanto, ya hemos pillado 2 ficheros candidatos

/etc/profile.d/jdk.csh 
/etc/profile.d/jdk.sh


Ahora los editamos empleando sudo gedit y el nombre de cada fichero y cambiamos:


/usr/lib/jvm/java-10-oracle 


por 

/usr/lib/jvm/java-8-openjdk-amd64

Ahora reiniciamos la máquina a ver si recoge llos nuevos valores.
En efecto, si hacemos en una ventana de comando hacemos

env | grep java

observamos que tanto PATH como JAVA_HOME apuntan a la versión 8 de java.

5. Instalación del paquete

Hay que tener en cuenta que cuando ejecutamos la instalación, nos mata los procesos que tenemos de Mozilla Firefox y Chrome. Por tanto vale la pena salirse de las sesiones de dichos programas

Ahora nos vamos a la carpeta donde se ha descomprimido el fichero "zip" y desde dentro de la carpeta donde está el fichero con la extensión ".deb"  (en mi caso es "Autofirma_1_6_2.deb") ejecutamos

sudo dpkg -i AutoFirma_1_6_2.deb

Y nos instala certificados raices en diferentes alamacenes de certificados, y nos mata las sesiones de Firefox y Chrome.

En concreto la bitácora que sale es:


S'està seleccionant el paquet autofirma prèviament no seleccionat.
(S'està llegint la base de dades… hi ha 314763 fitxers i directoris instal·lats actualment.)
S'està preparant per a desempaquetar AutoFirma_1_6_2.deb…
10391
10403
10410
10437
10465
10562
10577
10585
10592
10659
10675
10692
10757
10772
10790
S'està desempaquetant autofirma (1.6.2)…
S'està configurant autofirma (1.6.2)…
d’ag. 17, 2018 9:06:37 AM es.gob.afirma.standalone.configurator.AutoFirmaConfigurator <init>
INFO: Se configurara la aplicacion en modo nativo
d’ag. 17, 2018 9:06:37 AM es.gob.afirma.standalone.configurator.ConsoleManager getConsole
INFO: Se utilizara la consola de tipo I/O
d’ag. 17, 2018 9:06:37 AM es.gob.afirma.standalone.configurator.ConfiguratorLinux configure
INFO: Identificando directorio de aplicación...
d’ag. 17, 2018 9:06:37 AM es.gob.afirma.standalone.configurator.ConfiguratorLinux configure
INFO: Directorio de aplicación: /usr/lib/AutoFirma
d’ag. 17, 2018 9:06:37 AM es.gob.afirma.standalone.configurator.ConfiguratorLinux configure
INFO: Generando certificado para la comunicación con el navegador web...
d’ag. 17, 2018 9:06:38 AM es.gob.afirma.standalone.configurator.ConfiguratorLinux configure
INFO: Se guarda el almacén de claves en el directorio de instalación de la aplicación
d’ag. 17, 2018 9:06:38 AM es.gob.afirma.standalone.configurator.ConfiguratorLinux configure
INFO: Se va a instalar el certificado en el almacen de Mozilla Firefox
d’ag. 17, 2018 9:06:38 AM es.gob.afirma.standalone.configurator.ConfiguratorLinux configure
INFO: Fin de la configuración
Generacion de certificados
Instalacion del certificado CA en el almacenamiento de Firefox y Chrome
Updating certificates in /etc/ssl/certs...
0 added, 0 removed; done.
Running hooks in /etc/ca-certificates/update.d...

done.
done.
Instalacion del certificado CA en el almacenamiento del sistema
S'estan processant els activadors per a desktop-file-utils (0.22-1ubuntu5.2)…
S'estan processant els activadors per a bamfdaemon (0.5.3~bzr0+16.04.20180209-0ubuntu1)…
Rebuilding /usr/share/applications/bamf-2.index...
S'estan processant els activadors per a gnome-menus (3.13.3-6ubuntu3.1)…
S'estan processant els activadors per a mime-support (3.59ubuntu1)…


Parece ser que no ha dado ningún problema. Si acaso diera algún problema se debería desinstalar (utilizando sudo apt-get remove --purge autofirma )

Ahora para que termine de buscar alguna dependencia

sudo apt-get -f install

Pero se exige que se instale el libnss3-tools que parece ser sirve para acceder al almacen de certificados de Mozilla NSS, que es un poco pejilguero

sudo apt-get install libnss3-tools

Ahora ejecutamos desde una pantalla de comandos:

AutoFirma


6. Problemas


Parece ser que no funciona con el OpenJDK, por tanto hay que tener el Java Oracle. Tampoco funciona con versiones de Oracle Java superiores a 8.

6.1 Problemas con OpenJDK


Y nos sale un error que parece ser se ha reportado en este link. Parece ser que hay cierta incompatibilidad con OpenJDK. Veamos lo que aparece


d’ag. 17, 2018 10:17:57 AM es.gob.afirma.standalone.ProxyUtil setDefaultProxy
INFO: Las conexiones para protocolo 'http' son por defecto de tipo: DIRECT
d’ag. 17, 2018 10:17:57 AM es.gob.afirma.standalone.ProxyUtil setDefaultProxy
INFO: Las conexiones para protocolo 'https' son por defecto de tipo: DIRECT
d’ag. 17, 2018 10:17:57 AM es.gob.afirma.standalone.ProxyUtil setProxySettings
INFO: No se usara Proxy para las conexiones de red
d’ag. 17, 2018 10:17:57 AM es.gob.afirma.standalone.SimpleAfirma main
INFO: No se buscaran nuevas versiones de la aplicacion
d’ag. 17, 2018 10:17:57 AM es.gob.afirma.standalone.SimpleAfirma printSystemInfo
INFO: Resolucion DPI de pantalla: 0
Sistema operativo: Linux
Version del SO: 4.4.0-133-generic
Version de Java: 1.8.0_181
Arquitectura del JRE: 64
Java Vendor: Oracle Corporation
Localizacion por defecto: ca_ES
Tamano actual en memoria: 240MB
Tamano maximo de memoria: 3547MB
Memoria actualmente libre: 206MB
d’ag. 17, 2018 10:17:57 AM es.gob.afirma.standalone.SimpleAfirma main
INFO: Apertura como herramienta de escritorio
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.
d’ag. 17, 2018 10:17:57 AM es.gob.afirma.standalone.SimpleAfirma main
INFO: Se intenta una precarga temprana de NSS
d’ag. 17, 2018 10:17:57 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/fj2l69hz.default-1495715468453' certPrefix='' keyPrefix='' flags='readOnly'"
d’ag. 17, 2018 10:17:57 AM es.gob.afirma.keystores.mozilla.MozillaKeyStoreUtilities loadNssJava8
INFO: NSS necesita una precarga o tratamiento de sus dependencias: java.lang.reflect.InvocationTargetException
d’ag. 17, 2018 10:17:57 AM es.gob.afirma.keystores.mozilla.MozillaKeyStoreUtilities loadNSS
INFO: Proveedor PKCS#11 para NSS anadido: SunPKCS11-NSSCrypto-AFirma
d’ag. 17, 2018 10:17:57 AM es.gob.afirma.keystores.AOKeyStoreManager init
INFO: Inicializamos el almacen de tipo: DNIe y tarjetas FNMT-TIF
d’ag. 17, 2018 10:17:57 AM es.gob.afirma.keystores.AOKeyStoreManagerHelperFullJava init
INFO: Cargando KeyStore 100% Java para DNIe y tarjetas FNMT-TIF
d’ag. 17, 2018 10:17:57 AM es.gob.jmulticard.jse.smartcardio.SmartcardIoConnection setTerminal
WARNING: Error intentando abrir la conexion con el lector: es.gob.jmulticard.apdu.connection.CardNotPresentException: No hay ninguna tarjeta insertada en el lector: javax.smartcardio.CardNotPresentException: No card present
d’ag. 17, 2018 10:17:57 AM es.gob.afirma.keystores.KeyStoreUtilities addPreferredKeyStoreManagers
INFO: No se ha encontrado un DNIe: es.gob.jmulticard.card.InvalidCardException: Se esperaba una tarjeta de tipo 'DNIe' pero se encontro otra con ATR=3BF71800008031FE45736674652D6E66C4
d’ag. 17, 2018 10:17:57 AM es.gob.afirma.keystores.mozilla.MozillaKeyStoreUtilities getMozillaPKCS11Modules
INFO: Se incluiran los modulos nativos de DNIe/CERES si se encuentran configurados
d’ag. 17, 2018 10:17:57 AM es.gob.afirma.keystores.mozilla.MozillaKeyStoreUtilities getMozillaPKCS11Modules
INFO: Obtenidos los modulos externos de Mozilla desde 'pkcs11.txt'
d’ag. 17, 2018 10:17:57 AM es.gob.afirma.keystores.mozilla.MozillaUnifiedKeyStoreManager init
INFO: Encontrados los siguientes modulos PKCS#11 externos instalados en Mozilla / Firefox: '/usr/lib/libaetpkss.so.3.0' 
d’ag. 17, 2018 10:17:57 AM es.gob.afirma.keystores.AOKeyStoreManager init
INFO: Inicializamos el almacen de tipo: PKCS#11
d’ag. 17, 2018 10:17:57 AM es.gob.afirma.keystores.KeyStoreUtilities createPKCS11ConfigFile
INFO: Creada configuracion PKCS#11:
library=/usr/lib/libaetpkss.so.3.0
name=libaetpkss_so_3_0
showInfo=false

d’ag. 17, 2018 10:17:57 AM es.gob.afirma.keystores.AOKeyStoreManager init
INFO: Inicializamos el almacen de tipo: PKCS#11
d’ag. 17, 2018 10:17:57 AM es.gob.afirma.keystores.KeyStoreUtilities createPKCS11ConfigFile
INFO: Creada configuracion PKCS#11:
library=/usr/lib/libaetpkss.so.3.0
name=libaetpkss_so_3_0
showInfo=false

d’ag. 17, 2018 10:17:57 AM es.gob.afirma.keystores.mozilla.MozillaUnifiedKeyStoreManager init
WARNING: No se ha podido inicializar el PKCS#11 'Nou mòdul PKCS#11' tras haberlo intentado dos veces: es.gob.afirma.keystores.AOKeyStoreManagerException: Error construyendo el KeyStore PKCS#11 para la biblioteca '/usr/lib/libaetpkss.so.3.0': java.security.KeyStoreException: KeyStore instantiation failed, es.gob.afirma.keystores.AOKeyStoreManagerException: Error construyendo el KeyStore PKCS#11 para la biblioteca '/usr/lib/libaetpkss.so.3.0': java.security.KeyStoreException: KeyStore instantiation failed
d’ag. 17, 2018 10:17:57 AM es.gob.afirma.standalone.SimpleAfirma setKeyStoreManager
INFO: Establecido KeyStoreManager: Gestor de almacenes de claves Mozilla / Firefox (unificado) con nombre Mozilla / Firefox (unificado)


Tenemos un pequeño error en el sistema de logging (bitácora) con SFL4J, pero si tenemos un error grave pues no ha podido inicializar el PKCS#11, y por tanto no puede ver nuestra tarjeta criptográfica.

6.2 Problemas con Java Oracle 10

Análogamente con el Java Oracle 10 tenemos practicamente la misma traza de error, pero con mayor descripción del error


ag. 17, 2018 2:31:27 P. M. es.gob.afirma.standalone.ProxyUtil setDefaultProxy
INFO: Las conexiones para protocolo 'http' son por defecto de tipo: DIRECT
ag. 17, 2018 2:31:27 P. M. es.gob.afirma.standalone.ProxyUtil setDefaultProxy
INFO: Las conexiones para protocolo 'https' son por defecto de tipo: DIRECT
ag. 17, 2018 2:31:27 P. M. es.gob.afirma.standalone.ProxyUtil setProxySettings
INFO: No se usara Proxy para las conexiones de red
ag. 17, 2018 2:31:27 P. M. es.gob.afirma.standalone.SimpleAfirma main
INFO: No se buscaran nuevas versiones de la aplicacion
ag. 17, 2018 2:31:27 P. M. es.gob.afirma.standalone.SimpleAfirma printSystemInfo
INFO: Resolucion DPI de pantalla: 0
Sistema operativo: Linux
Version del SO: 4.4.0-133-generic
Version de Java: 10.0.2
Arquitectura del JRE: 64
Java Vendor: "Oracle Corporation"
Localizacion por defecto: ca_ES
Tamano actual en memoria: 250MB
Tamano maximo de memoria: 3990MB
Memoria actualmente libre: 234MB
ag. 17, 2018 2:31:27 P. M. es.gob.afirma.standalone.SimpleAfirma main
INFO: Apertura como herramienta de escritorio
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.
ag. 17, 2018 2:31:27 P. M. es.gob.afirma.standalone.SimpleAfirma main
INFO: Se intenta una precarga temprana de NSS
ag. 17, 2018 2:31:27 P. M. 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/fj2l69hz.default-1495715468453' certPrefix='' keyPrefix='' flags='readOnly'"
ag. 17, 2018 2:31:27 P. M. es.gob.afirma.keystores.mozilla.MozillaKeyStoreUtilities loadNssJava8
INFO: NSS necesita una precarga o tratamiento de sus dependencias: java.lang.NoSuchMethodException: sun.security.pkcs11.SunPKCS11.<init>(java.io.InputStream)
ag. 17, 2018 2:31:27 P. M. es.gob.afirma.keystores.mozilla.MozillaKeyStoreUtilities loadNssJava8
WARNING: Ha fallado el segundo intento de carga de NSS: java.lang.NoSuchMethodException: sun.security.pkcs11.SunPKCS11.<init>(java.io.InputStream)
ag. 17, 2018 2:31:27 P. M. es.gob.afirma.keystores.mozilla.NssKeyStoreManager getNssProvider
SEVERE: Error obteniendo el proveedor NSS: java.lang.NoSuchMethodException: sun.security.pkcs11.SunPKCS11.<init>(java.io.InputStream)
java.lang.NoSuchMethodException: sun.security.pkcs11.SunPKCS11.<init>(java.io.InputStream)
 at java.base/java.lang.Class.getConstructor0(Class.java:3302)
 at java.base/java.lang.Class.getConstructor(Class.java:2110)
 at es.gob.afirma.keystores.mozilla.MozillaKeyStoreUtilities.loadNssJava8(MozillaKeyStoreUtilities.java:669)
 at es.gob.afirma.keystores.mozilla.MozillaKeyStoreUtilities.loadNSS(MozillaKeyStoreUtilities.java:718)
 at es.gob.afirma.keystores.mozilla.NssKeyStoreManager.getNssProvider(NssKeyStoreManager.java:111)
 at es.gob.afirma.keystores.mozilla.NssKeyStoreManager.init(NssKeyStoreManager.java:58)
 at es.gob.afirma.keystores.mozilla.MozillaUnifiedKeyStoreManager.init(MozillaUnifiedKeyStoreManager.java:68)
 at es.gob.afirma.keystores.AOKeyStoreManagerFactory.getNssKeyStoreManager(AOKeyStoreManagerFactory.java:488)
 at es.gob.afirma.keystores.AOKeyStoreManagerFactory.getMozillaUnifiedKeyStoreManager(AOKeyStoreManagerFactory.java:519)
 at es.gob.afirma.keystores.AOKeyStoreManagerFactory.getAOKeyStoreManager(AOKeyStoreManagerFactory.java:116)
 at es.gob.afirma.standalone.SimpleAfirma.main(SimpleAfirma.java:571)

ag. 17, 2018 2:31:27 P. M. es.gob.afirma.keystores.AOKeyStoreManager init
INFO: Inicializamos el almacen de tipo: DNIe y tarjetas FNMT-TIF
ag. 17, 2018 2:31:27 P. M. 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
ag. 17, 2018 2:31:27 P. M. es.gob.afirma.keystores.mozilla.MozillaKeyStoreUtilities getMozillaPKCS11Modules
INFO: Se incluiran los modulos nativos de DNIe/CERES si se encuentran configurados
ag. 17, 2018 2:31:27 P. M. es.gob.afirma.keystores.mozilla.MozillaKeyStoreUtilities getMozillaPKCS11Modules
INFO: Obtenidos los modulos externos de Mozilla desde 'pkcs11.txt'
ag. 17, 2018 2:31:27 P. M. es.gob.afirma.keystores.mozilla.MozillaUnifiedKeyStoreManager init
INFO: Encontrados los siguientes modulos PKCS#11 externos instalados en Mozilla / Firefox: '/usr/lib/libaetpkss.so.3.0' 
ag. 17, 2018 2:31:27 P. M. es.gob.afirma.keystores.AOKeyStoreManager init
INFO: Inicializamos el almacen de tipo: PKCS#11
ag. 17, 2018 2:31:27 P. M. es.gob.afirma.keystores.KeyStoreUtilities createPKCS11ConfigFile
INFO: Creada configuracion PKCS#11:
library=/usr/lib/libaetpkss.so.3.0
name=libaetpkss_so_3_0
showInfo=false

ag. 17, 2018 2:31:27 P. M. es.gob.afirma.keystores.AOKeyStoreManager init
INFO: Inicializamos el almacen de tipo: PKCS#11
ag. 17, 2018 2:31:27 P. M. es.gob.afirma.keystores.KeyStoreUtilities createPKCS11ConfigFile
INFO: Creada configuracion PKCS#11:
library=/usr/lib/libaetpkss.so.3.0
name=libaetpkss_so_3_0
showInfo=false

ag. 17, 2018 2:31:27 P. M. es.gob.afirma.keystores.mozilla.MozillaUnifiedKeyStoreManager init
WARNING: No se ha podido inicializar el PKCS#11 'Nou mòdul PKCS#11' tras haberlo intentado dos veces: es.gob.afirma.keystores.AOKeyStoreManagerException: No se ha podido instanciar el proveedor SunPKCS11 para la la biblioteca /usr/lib/libaetpkss.so.3.0: java.lang.NoSuchMethodException: sun.security.pkcs11.SunPKCS11.<init>(java.io.InputStream), es.gob.afirma.keystores.AOKeyStoreManagerException: No se ha podido instanciar el proveedor SunPKCS11 para la la biblioteca /usr/lib/libaetpkss.so.3.0: java.lang.NoSuchMethodException: sun.security.pkcs11.SunPKCS11.<init>(java.io.InputStream)
ag. 17, 2018 2:31:27 P. M. es.gob.afirma.standalone.SimpleAfirma setKeyStoreManager
INFO: Establecido KeyStoreManager: Gestor de almacenes de claves Mozilla / Firefox (unificado) con nombre Mozilla / Firefox (unificado)
WARNING: An illegal reflective access operation has occurred
WARNING: Illegal reflective access by es.gob.afirma.standalone.SimpleAfirma (file:/usr/lib/AutoFirma/AutoFirma.jar) to field sun.awt.X11.XToolkit.awtAppClassName
WARNING: Please consider reporting this to the maintainers of es.gob.afirma.standalone.SimpleAfirma
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
ag. 17, 2018 2:31:27 P. M. es.gob.afirma.standalone.SimpleAfirma loadDefaultKeyStore
INFO: Se omite la carga concurrente de almacen por haberse hecho una precarga previa

7. Oracle Java 1.8.0_191


Con esta versión de Java si que parece que funciona. He seguido las instrucciones de instalación de Website for Students que os resumo:

a. Buscar la PPA de tercerasd partes

sudo add-apt-repository ppa:webupd8team/java

b. Instalar java 8

sudo apt update
sudo apt install oracle-java8-installer

c. Configurar como Java 8 por omisión y verificar la versión

sudo apt install oracle-java8-set-default
javac -version

y debería salir java 1.8.0_191

d. Notas
* Cuando se instala dice que va a modificar el fichero etc/profile.d/jdk.csh para que coja esta  versión de java en el JAVA_HOME

* Para comprobar que esta versión de java es la que está corriendo teclear

sudo update-alternatives --config java

y verificar que sale algo parecido


 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
  Selecció    Camí                                             Prioritat  Estat
------------------------------------------------------------
  0            /usr/lib/jvm/java-10-oracle/bin/java               1091      mode automàtic
  1            /home/eduard/ProgramesMeus/jdk-10.0.1/bin/java     1         mode manual
  2            /home/eduard/ProgramesMeus/jdk1.8.0_181/bin/java   1         mode manual
  3            /usr/lib/jvm/java-10-openjdk-amd64/bin/java        1         mode manual
  4            /usr/lib/jvm/java-10-oracle/bin/java               1091      mode manual
  5            /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java     1081      mode manual
* 6            /usr/lib/jvm/java-8-oracle/jre/bin/java            1081      mode manual
  7            /usr/lib/jvm/java-9-openjdk-amd64/bin/java         1091      mode manual
  8            /usr/lib/jvm/java-9-oracle/bin/java                1091      mode manual

Para verificar que Autofirma funciona, debemos tener los certificados instalados. en este caso se pueden instalar en Mozilla tanto si son de tarjeta como de Software. En Chrome he podido instalarlos los de software solamente.

Una vez instalado en Mozilla, parece ser que Autofirma 1.6.2 los puede recoger para firmar,

sábado, 11 de agosto de 2018

Ubuntu 16: Instalar tarjeta ACCV smart card

1. Introducción


1.1 Debemos primeramente tener instalado el lector de tarjetas (En el post anterior hemos instalado el Zoweetek).

1.2 Ahora debemos saber si nuestro ordenador es de 32 o 64 bits. Para ello teclear

uname -i

si aparece x86_64 entonces es de 64 bits, si aparece solo x86 entonces será de 32 bits

2. Lector distinto de Zoweetek(64 bits)

En este caso seguramente se tendrá un lector suminstrado por la ACCV, en este caso descargar
Para el caso de 32 bits seguir lo que dice la ACCV en este link

Para 64 bits, siguiendo las directrices de este link:

Instalamos los prerequisitos

sudo apt-get -y install pcscd libpcsclite1 libccid opensc-pkcs11 libpam-pkcs11

Descargamos el driver

http://www.accv.es/fileadmin/Archivos/software/scmccid_linux_64bit_driver_V5.0.21.tar.gz

Ahora descomprimimos y nos vamos a la carpeta donde está el fichero y nos situamos con el comand "cd" dentro de la carpeta scmccid_5.0.21_linux 

Instalamos, ejecutando:

sudo sh ./install.sh

Y reiniciamos el demonio de pcsd

sudo /etc/init.d/pcscd restart

3. Descarga de drivers (controladores)

Puede ser interesante que se instalen los controladores de los lectores de la ACCV(del apartado2) , pues pueden instalar prerequisitos que no tengamos instalados previamente.

Descargarnos los drivers para la tarjeta G&D (Si es Siemens puede no funcionar)

2.1 Versión de 64 bits: 3.0.87 de la ACCV.

2.2 Versión 32 bits:3.0.87 de la ACCV.

Existen otras versiones, por ejemplo la de la entidad certificadora SafeWeb de Brasil que proporciona la versión 3.93 pero solo para 32 bits ya que el enlace a 64 bits no es correcto y apunta a la de 32 bits

4. Instalación del controlador

Según la ACCV, la guía viene indicada para Ubuntu 14 y 12. Para ello pide que se instale los 2 prerequisitos siguientes con "sudo apt-get -y install libwxgtk2.8-0 libwxbase2.8-0", pero este comado falla.

Para ello buscamos en Google ("Ubuntu 16  libwxgtk2.8-0" y "Ubuntu 16  libwxbase2.8-0") y nos propone las descargas de estos paquetes, en concreto podemos descargarlos desde estos enlaces.

Para 32 bits:



Para 64 bits:


Para cada uno de los paquetes ejecutamos, para 64 BITS que es nuestro caso

sudo dpkg -i libwxgtk2.8-0_2.8.12.1+dfsg2-2ubuntu2+1_webupd8_xenial0_amd64.deb

sudo dpkg -i libwxbase2.8-0_2.8.12.1+dfsg2-2ubuntu2+1_webupd8_xenial0_amd64.deb

con ello hemos instalado los prerequisitos

Ahora nos toca instalar el controlador de la tarjeta G&D (Smart Cafe), que para nuestro casdo de 64 BITS es:

sudo dpkg -i safesign_3.0.87.amd64.deb

5. Istalarlo en Mozilla firefox

Abre Firefox y busca las 3 rayitas de la parte superior derecha y da click



Seleccione preferencias


Ir a seguridad y privacidad



Bucar Certificados

En dispositivos de seguridad apretar botón


Seleccionamos cargar







E indicamos de nombre

ACCV G&D PKSC11

Y de nombre del fichero del módulo

/usr/lib/libaetpkss.so.3

Ahora entramos en ACCV G&D PKCS11 y entre los dispositivos que hay (en mi caso puedo ver ACCV) , lo selecciono y aparece y le damos "iniciar la sesion"




Ahora

nos pide la contraseña de la tarjeta y en teoría debería de funcionar



Cuando entramos en una web que nos pide autenticación por certificado, aparece


En fin ya me funciona tras 2 días de lucha!

Pero mi gozo en un pozo.

Tras instalar posteriormente Autofirma, me ha jodío bien el asunto!!!!

Pero haciendo de nuevo

sudo dpkg -i safesign_3.0.87.amd64.deb

He podido entrar en la web de la SS y obtener la vida laboral.

Por tanto hay que ver que hace autofirma para que desinstale el driver de la smart card!


viernes, 10 de agosto de 2018

Ubuntu 16 instalar Smart Card Reader Zoweetek 12026-2 tarjeta

1. Introducción


Compré por Amazon este lector de Smart Cards, y decían que eran compatibles en Linux.

Con 10 €, digo, poco puedo perder (pero no contaba con el tiempo).

En esta url nos indican los drivers tanto para Linux como para windows, pero para instalar la opción para Linux (Ubuntu 16) estan desfasados y me tiré un día entero perdido.

Haciendo un lsusb me aparece como

Bus 003 Device 017: ID 058f:9540 Alcor Micro Corp. AU9540 Smartcard Reader

Parece ser que este dispositivo es una copia del Alcor AU9540

Veamos como proceder a su instalación


2. Descargar drivers actualizados


Ver si hay nuevas versiones en dichas URLs, yo de momento he descargado estas últimas versiones y lo he hecho funcionar.

2.1 libusb-1.0.22

2.2 pcsc-lite-1.8.22

2.3 ccid-1.4.28


3. Instalar

Ahora hay que seguir los pasos, tras conectar el lector a un puerto USB y metiendo la tarjeta. En mi caso es una tarjeta de la ACCV:

3.1. Copiar todos los archivos en una carpeta

3.2 Extraer dichos archivos comprimidos. Cada archivo va a crear su carpeta propia

3.3 (Opcionalmente borrar los archivos comprimido)

3.4 Instalar libusb:

cd libusb*                  
./configure                             
make                                    
sudo make install   

3.5 Instalar pcsc-lite:

PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig;export PKG_CONFIG_PATH
 
cd ../pcsc-lite*
./configure --disable-libudev
make                                    
sudo make install

3.6 Instalar el driver ccid:

cd ../ccid*
./configure
make                                    
sudo make install  

sudo cd src
sudo cp 92_pcscd_ccid.rules /etc/udev/rules.d/


3.7 Rearrancar el demonio pcscd

sudo /etc/init.d/pcscd restart

3.8 Probar si lee la tarjeta: Para ello


cd ../pcsc*
cd doc/example
./pcsc_demo

Y nos debe de salir


PC/SC sample code
V 1.4 2003-2009, Ludovic Rousseau <ludovic.rousseau@free.fr>

THIS PROGRAM IS NOT DESIGNED AS A TESTING TOOL FOR END USERS!
Do NOT use it unless you really know what you do.

SCardListReaders: OK

0: Alcor Micro AU9560 00 00
1: OMNIKEY AG CardMan 3121 01 00
 Protocol: 2
SCardConnect: OK

 Reader: Alcor Micro AU9560 00 00 (length 25 bytes)
 State: 0x34
 Prot: 2
 ATR (length 17 bytes): 3B F7 18 00 00 80 31 FE 45 73 66 74 65 2D 6E 66 C4
SCardStatus: OK

Sending: 00 A4 00 00 02 3F 00 
Received: 6A 86 
SCardTransmit: OK

SCardDisconnect: OK

 Protocol: 2
SCardConnect: OK

Sending: 00 A4 00 00 02 3F 00 
Received: 6A 86 
SCardTransmit: OK

SCardReconnect: OK

 Reader: Alcor Micro AU9560 00 00 (length 25 bytes)
 State: 0x34
 Prot: 2
 ATR (length 17 bytes): 3B F7 18 00 00 80 31 FE 45 73 66 74 65 2D 6E 66 C4
SCardStatus: OK

 state: 0x0122
SCardGetStatusChange: OK

SCardBeginTransaction: OK

Sending: 00 A4 00 00 02 3F 00 
Received: 6A 86 
SCardTransmit: OK

SCardEndTransaction: OK

SCardDisconnect: OK

Ahora solo falta instralar los drivers del Smart Card (que puede ser Siemens CardOS, G&D, DNI electrónico etc)

También se puede ver si funciona haciendo

pcsc_scan

y sale


PC/SC device scanner
V 1.4.25 (c) 2001-2011, Ludovic Rousseau <ludovic.rousseau@free.fr>
Compiled with PC/SC lite version: 1.8.14
Using reader plug'n play mechanism
Scanning present readers...
0: Identive CLOUD 2700 R Smart Card Reader (53691541213387) 00 00
1: Alcor Micro AU9560 01 00
2: OMNIKEY AG CardMan 3121 02 00

Mon Aug 13 14:27:23 2018
Reader 0: Identive CLOUD 2700 R Smart Card Reader (53691541213387) 00 00
  Card state: Card removed, 
Reader 1: Alcor Micro AU9560 01 00
  Card state: Card inserted, 
  ATR: 3B F7 18 00 00 80 31 FE 45 73 66 74 65 2D 6E 66 C4

ATR: 3B F7 18 00 00 80 31 FE 45 73 66 74 65 2D 6E 66 C4
+ TS = 3B --> Direct Convention
+ T0 = F7, Y(1): 1111, K: 7 (historical bytes)
  TA(1) = 18 --> Fi=372, Di=12, 31 cycles/ETU
    129032 bits/s at 4 MHz, fMax for Fi = 5 MHz => 161290 bits/s
  TB(1) = 00 --> VPP is not electrically connected
  TC(1) = 00 --> Extra guard time: 0
  TD(1) = 80 --> Y(i+1) = 1000, Protocol T = 0 
-----
  TD(2) = 31 --> Y(i+1) = 0011, Protocol T = 1 
-----
  TA(3) = FE --> IFSC: 254
  TB(3) = 45 --> Block Waiting Integer: 4 - Character Waiting Integer: 5
+ Historical bytes: 73 66 74 65 2D 6E 66
  Category indicator byte: 73 (proprietary format)
+ TCK = C4 (correct checksum)

Possibly identified card (using /usr/share/pcsc/smartcard_list.txt):
3B F7 18 00 00 80 31 FE 45 73 66 74 65 2D 6E 66 C4
 SmartCafe Expert 3.2 72K
Reader 2: OMNIKEY AG CardMan 3121 02 00
  Card state: Card removed, 


miércoles, 8 de agosto de 2018

LibreOffice mail merge en Ubuntu

1. Introducción


Cuando se utiliza el asistente de correspondencia mail merge de Libre Office hay que tener en cuenta que:

a. La carta principal ha de ser con extensión  ".odt" y no ".doc" ni ".docx". En caso contrario, se deberá guardar en el formato ".odt"

b. La lista de destinatarios tiene que ser en formato ".ods" y no en formato ".xls" no otro tipo de formato (siempre que elijamos que venga de una hoja de cálculo". Si no lo está, hay que guardar la hoja de cálculo enformato ".ods"

c. Hacer la combinación utilizando Tools-Mail Merge Wizard donde se indicará al sistema cual es el documento base, y la lista de destinatarios

d. Al imprimir se seleccionará que se genere un fichero individual y ya lo tenemos.


Si no se uitilizan los formatos "open document" tanto para la carta como para las direcciones, obtenemos un error interno y no funciona

Instalar paquetes ".deb" en ubuntu. Ejemplo de Autofirma

1. Introducción


Quiero instalar Autofirma en Ubuntu. Para ello, del link anterior descargo un fichero zip y lo descomprimo y aparece un manual que que nos indica como instalar el paquete.

Pues como soy gafe, la instrucciones dpgt me falla.

Veamos que he hecho.

a. Descargar el fichero Autofirma_linux.zip
b. Descomprimir este fichero en un carpeta
c. Situarme en dicha carpeta
d. Ejecuto en una linea de comandos: sudo dpkg –i AutoFirma_1_6_2.deb 
e. Me da errores y me invita a utilizar dpkg --help


2. Solución

En la web respuesta a una pregunta en StackExchange hace referencia al comando gdebi .

Tecleando

sudo gdebi AutoFirma_1_6_2.deb 

He podido instalar Autofirma.