Translate

jueves, 22 de marzo de 2012

Preparar certificado para firmar aplicaciones Adobe AIR

El alcance de este artículo es una pequeña guía de como utilizar el certificado proporcionado por la entidad certificadora oficial para firmar nuestras aplicaciones ADOBE AIR.

La principal ventaja de Adobe AIR es que te permite con un solo lenguaje de programación como es Action Script 3, crear aplicaciones multi-plataforma sin ningún problema. Es decir que la misma aplicación nos servirá tanto para un ordenador con sistema operativo Windows, Linux o IOS.

Si no queremos comercializar la aplicación o distribuirla a algún tipo de cliente el certificado nos da igual porque desde el propio Flash Builder podemos generar uno ficticio desde la opción Export >> Release.

En el caso de no utilizar un certificado proporcionado por una entidad certificadora implicará lo siguiente que al instalar aparezca un mensaje como este donde advertirá al usuario de la peligrosidad de instalar a la aplicación porque puede acceder a la información de nuestro ordenador:



Por este motivo si queremos comercializarla debemos de solicitar un certificado que nos permita firmar la aplicación y que el mensaje no sea tan amenazante. Una vez conseguido el certificado y firmada la aplicación con él el mensaje de instalación deberá se similar a este:




Para conseguir este tipo de certificado debemos de solicitarlo a una de las entidades certificadoras. Como hacer esto no se incluye en el alcance de este artículo, pero como ayuda os dejo un link para saber por donde empezar: Obtener certificados Adobe AIR

Una vez que obtenemos el certificado por parte de la entidad certificadora, que nos proporcionará una archivo xxx.pfx y una pasword, podemos caer en la lógica tentación de poner ese certificado y esa password para firmar nuestra aplicación.

Con ello lo único que vamos a conseguir es que nos de el siguiente error.

Error creating AIR file: Unable to build a valid certificate chain for the signer.

Este certificado que nos han proporcionado es el certificado de clave pública o certificado digital que nos identificará ante un tercero y a partir de ella podremos crear un certificado público que nos permitirá firmar la aplicación AIR y que la vincule con nosotros.

Para ello hacemos los siguientes pasos:

1 - Importar el certificado digital proporcionado por la entidad emisora en nuestro navegador

Pulsamos botón derecho sobre él y lo instalamos.


Aparecerá el Asistente para la importación de certificados pulsa siguiente >>
     
Seleccionamos el archivo a importar nombre_certificado.pfx Siguiente >>
     
Introducimos la contraseña proporcionada por el proveedor del certificado y marcamos las opciones de exportable y inclusión de las propiedades extendidas. Siguiente >>

Seleccionamos guardarlo en el almacén de certificados >> Siguiente
     
Pulsamos finalizar y nos mostrará el mensaje de  que  la importación se realizó correctamente.


2 - Comprobamos que el certificado se ha importado correctamente

Abrimos Internet explorer >> herramientas >> opciones de Internet >> Contenido >> Certificados





Nuestro certificado aparecerá en nuestro navegador con la información asociada.

3 - Exportar la clave privada encargada de firmar las aplicaciones

Pulsamos el botón de exportar que vemos en la imagen anterior y seleccionamos exportar la clave privada


Seleccionamos el formato de exportación y las opciones que vemos en la imagen


Por último elegimos password que tendrá el certificado (Esta contraseña será con la que firmaremos la aplicación AIR). También tenemos que seleccionar donde se guardará el archivo.


Terminamos la exportación y el mensaje será

La exportación se realizó correctamente.

Y obtendremos un archivo .pfx que nos  permitirá firmar la aplicación Adobe AIR sin problemas.

Espero que os sea de utilidad.


viernes, 2 de marzo de 2012

Error Tomcat 7 al iniciar: VerifyError: Cannot inherit from final class

Estaba configurando unos de nuestros proyectos con MAVEN y estaba poniendo en le archivo POM todos los JARS que tenía que en la carpeta WEB-INF\lib.

Una vez que termino el proceso arranco el servidor para ver si todo está en orden y me encuentro que aparece el siguiente error que es tan poco descriptivo:

Información: Starting Servlet Engine: Apache Tomcat/7.0.14
java.lang.VerifyError: Cannot inherit from final class
 at java.lang.ClassLoader.defineClass1(Native Method)
 at java.lang.ClassLoader.defineClass(ClassLoader.java:791)
 at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
 at org.apache.catalina.loader.WebappClassLoader.findClassInternal(WebappClassLoader.java:2818)
 at org.apache.catalina.loader.WebappClassLoader.findClass(WebappClassLoader.java:1148)
 at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1643)
 at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1521)
 at org.apache.catalina.startup.ContextConfig.checkHandlesTypes(ContextConfig.java:1969)
 at org.apache.catalina.startup.ContextConfig.processAnnotationsStream(ContextConfig.java:1932)
 at org.apache.catalina.startup.ContextConfig.processAnnotationsJar(ContextConfig.java:1826)
 at org.apache.catalina.startup.ContextConfig.processAnnotationsUrl(ContextConfig.java:1785)
 at org.apache.catalina.startup.ContextConfig.processAnnotations(ContextConfig.java:1771)
 at org.apache.catalina.startup.ContextConfig.webConfig(ContextConfig.java:1254)
 at org.apache.catalina.startup.ContextConfig.configureStart(ContextConfig.java:881)
 at org.apache.catalina.startup.ContextConfig.lifecycleEvent(ContextConfig.java:316)
 at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:119)
 at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:89)
 at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5103)
 at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:145)
 at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:1033)
 at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:774)
 at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:145)
 at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:1033)
 at org.apache.catalina.core.StandardEngine.startInternal(StandardEngine.java:291)
 at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:145)
 at org.apache.catalina.core.StandardService.startInternal(StandardService.java:443)
 at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:145)
 at org.apache.catalina.core.StandardServer.startInternal(StandardServer.java:727)
 at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:145)
 at org.apache.catalina.startup.Catalina.start(Catalina.java:620)
 at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
 at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
 at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
 at java.lang.reflect.Method.invoke(Method.java:601)
 at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:303)
 at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:431)


Después de googlear un poco veo que el problema puede residir en los JAR que estaba poniendo en el proyecto y voy quitando uno a uno hasta que el entorno arranca correctamente y detecto cual era el problema.

El problema era que he puesto una versión más vieja de un JAR, concretamente spring-data-commons-core-1.1.0.RELEASE, y tendría que ser spring-data-commons-core-1.2.0.RELEASE

Este jar antiguo en combinación con otros y la configuración de Spring ha hecho que Tomcat no sea capaz de arrancar.

Así que si te ocurre este error yo revisaría las librerías jar que tiene tu proyecto.