viernes, 18 de octubre de 2013

Problemas para Forms 11g en próximas actualizaciones de Java

Al actualizar a la última actualización de Java 7, el parche 45 (1.7.0_45), al mostrar la advertencia de seguridad sobre los JAR firmados acompaña el siguiente texto: "Esta aplicación estará bloqueada en una futura actualización de seguridad de Java porque el archivo MANIFEST de JAR no contiene el atributo de permisos. Póngase en contacto con el publicador para obtener más información".


¿Qué significa esto?, pues que a partir de ahora y cuando Oracle quiera, sacará una actualización de Java (no necesariamente en el próximo parche) que dejará a nuestros Forms KO.

Ya hace unos cuantos parches que en la consola de Java ya lo estaba advirtiendo al cargar los archivos, pero la mayoría hizo caso omiso a ello.

Los archivos JAR dentro de la carpeta META-INF tienen que tener el archivo MANIFEST.MF con las siguientes líneas (puede haber más):

Codebase: *
Permissions: all-permissions

¿Cómo solucionarlo?, en mi caso tengo 3 tipo de JARS, los propios de Oracle, JARS propios y JARS de terceros.

  • Los propios de Oracle (frmall.jar, frmgeneric_laf.jar, frmmain.jar, frmoracle_laf.jar, frmresources.jar, frmwebutil.jar): Para estos Oracle ha publicado un parche que incluye el MANIFEST correcto, el parche es el 16837591 que se puede bajar del Metalink. Si no tienes acceso al Metalink puedes hacer lo mismo que explico con JARS de terceros.
  • JARS Propios. Estos los voy a dividir en 2 grupos (los de iconos y los generados con JDeveloper).
    • Iconos: Creamos un archivo MANIFEST.TXT en cualquier ubicación de nuestro disco, por ejemplo, C:\Temp\MANIFEST.TXT con el siguiente contenido:
Manifest-Version: 1.0
Codebase: * 
Created-By: 1.6.0_35 (Sun Microsystems Inc.)
Permissions: all-permissions
      • Generar el archivo JAR con el siguiente comando (suponemos que los iconos están en C:\Temp\iconos): jar cvfm c:\temp\archivoiconos.jar c:\MANIFEST.TXT C:\temp\iconos\*.gif

    • Jars desplegados con JDeveloper. Creamos un archivo dentro del proyecto de JDeveloper de texto plano con el siguiente contenido (NOTA: Hay que dejar un retorno de carro al final para que al hacer el despliegue meta las 2 líneas):
Codebase: *
Permissions: all-permissions
        • Al configurar el despliegue del archivo JAR, marcamos la check "Include Manifest File (META-INF/MANIFEST.MF) he indicamos en "Additional Manifest Files to Merge into MANIFEST.MF" la ruta al archivo que hemos creado anteriormente.

  • JARS de Terceros: Lo que hice en este caso, es descomprimirlos, modificar el MANIFEST.MF, borrar la firma que estaba en la carpeta META-INF, volver a comprimirlos en formato ZIP y luego cambiar la extensión a ".jar". Luego los volví a firmar con mi certificado de firma de código.

Una vez tenemos los JAR con el MANIFEST correcto y perfectamente firmados, los volvemos a colocar en $ORACLE_HOME/forms/java y reiniciamos el servicio de WLS_FORMS:

$DOMAIN_HOME/bin/stopManagedWebLogic.sh WLS_FORMS
$DOMAIN_HOME/bin/startManagedWebLogic.sh WLS_FORMS&