Firma digital de un Applet

5
52135

Como configurar la seguridad de un Applet

1. Introducción

Un applet es un programa Java que, típicamente, se ejecuta dentro de un navegador Web.

Es posible que en algunos casos necesitemos que un applet se conecte a un servidor Web, distinto del servidor de donde se ha bajado el propio applet, o que necesite escribir en el disco local algún tipo de información. Por las restricciones de seguridad de la JVM, esto no es posible, ya que para evitar ataques maliciosos un applet se ejecuta en un entorno controlado.

Si queremos “relajar” estas restricciones de seguridad es necesario que el applet esté “firmado” por alguna entidad de confianza para el cliente. De esta forma el cliente puede estar tranquilo porque sabe que la ejecución del applet no va a tener ningún efecto malicioso en su equipo.

Un applet lo firmamos usando un certificado (un ficherito que contiene una firma digital). Normalmente este certificado nos lo proporciona una entidad reconocida mundialmente (como VeriSign). Con esto conseguimos que cuando un tercero vea nuestro certificado, y vea que este está firmado por esa entidad, pueda confiar del certificado.

En el ejemplo que vamos a ver, vamos a generar un certificado firmado por nosotros mismos, estos certificados nos pueden servir de prueba o para nuestra Intranet, pero si queremos usarlos en Internet suele ser recomendable que lo firme una entidad certificadora con autoridad o reconocimiento a nivel mundial, de lo contrario puede que los usuarios de nuestro applet no se fíen, y nunca lleguen a usarlo.

2. Como firmar un applet

Para firmar un applet con el JDK 1.2 o superior usaremos las utilidades

  • keytool: la usaremos para generar los certificados.
  • jarsigner: la usaremos para firmar el applet con el certificado que hemos generado.

Estas utilidades las podemos encontrar en $JAVA_HOME/bin

2.1. Crear el certificado

En primer lugar generamos un par de claves (privada/publica) que usaremos

keytool -genkey -alias
autentia -validity 120 -v

Con esto estamos generando un par de claves (privada/publica) que se asocian con el alias ‘autentia’ con una validez de 120 días, que por defecto usa el algoritmo DSA con longitud de clave de 1024.

La opción -v es para activar el modo ‘verbose’, que nos permite ver más información de lo que va haciendo el comando.

Cuando ejecutemos el comando nos pedirá cierta información:

  • En primer lugar nos pedirá la clave para el almacén de claves. Este almacén es donde se guardan las claves que vamos generando, los certificado, … Es por esto que necesite estar protegido. Siempre que accedamos a este almacén tendremos que especificar esta clave.
  • Luego nos pedirá nombre y apellidos. Por ejemplo: Alejandro Pérez 🙂
  • Luego nos pide el nombre del departamento. Por ejemplo: Desarrollo.
  • Luego nos pide el nombre de la organización. Por ejemplo: Autentia Real Business Solutions.
  • Luego nos pide el nombre de la ciudad o localidad. Por ejemplo: Tres Cantos.
  • Luego el nombre de la provincia. Por ejemplo: Madrid
  • El código de país en dos letras: ES
  • Nos pide confirmar los datos

Veremos que esta generando la clave y un certificado auto firmado (SHA1WithDSA).

Nos pide la contraseña para el alias ‘autentia’ que acabamos de crear.

Y ya está. En este punto tenemos un certificado firmado por nosotros mismos.

2.2. Firmar el jar

Ahora vamos a firmar el applet. Recordar que tenemos que meter nuestro applet dentro de un jar, y será este jar el que firmemos con:

jarsigner.exe miapplet.jar
autentia -verbose

Esto sobreescribirá ‘miapplet.jar’ y añadirá un par de ficheros en el directorio META-INF, con la información de la firma.

La opción -verbose es para que el comando nos de más información sobre lo que va haciendo.

Al ejecutar el comando nos pedirá la clave para acceder al almacén de claves.

Conclusiones

Como se puede ver es muy sencillo generar nuestros propios certificados, y firmar nuestros jar.

4. Sobre el autor

Alejandro Pérez García

Dir. Implantación y Rendimiento

mailto:alejandropg@autentia.com

Autentia Real Business Solutions S.L.

http://www.autentia.com

Alejandro es socio fundador de Autentia y nuestro experto en Java EE, Linux y optimización de aplicaciones empresariales. Ingeniero en Informática y Certified ScrumMaster. Seguir @alejandropgarci Si te gusta lo que ves, puedes contratarle para darte ayuda con soporte experto, impartir cursos presenciales en tu empresa o para que realicemos tus proyectos como factoría (Madrid). Puedes encontrarme en Autentia: Ofrecemos servicios de soporte a desarrollo, factoría y formación.

5 COMENTARIOS

  1. He estado buscando como hacer que mi applet genere un archivo de texto plano, se supone con los applets no se puede, en la introduccion de este tema mencionabas que esto es posible mediante la firma de los applets, como se realizaria esto?? unicamente firmandolo y listo o hay que hacer otras cosas??? Agradecere mucho tu ayuda.

  2. Muchas gracias por la información, tengo una duda, si mi applet depende de otros archivos .Jar, estos también deben ser firmados?

    Yo firmé el applet y al parecer no hay problema, firmé también los .jar adicionales pero al ejecutar el applet me sale el mensaje: java.lang.SecurityException: invalid SHA1 signature.

    Espero me puedan orientar en qué puedo hacer. Gracias.

  3. Gracias por la respuesta, también me gustaría saber si me puedes orientar como resolver lo siguiente. El applet que estoy implementando funciona bien al ejecutarlo en el Appleviewer, pero al mostrarlo en la página Web me sale el mensaje: \\\»Se bloqueará la ejecución de aplicaciones por parte de publicadores desconocidos en versiones posteriores porque es potencialmente inseguro y presenta un riesgo para la seguridad\\\», también me indica que \\\»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\\\»,

    Cómo hago para que no salga ese mensaje, específicamente ¿qué se debe hacer para que el archivo MANIFEST de JAR contenga el atributo de permisos que indica el mensaje?.

    Espero me puedas ayudar. De antemano, muchas gracias.

  4. Alejandro muy buen post, gracias.
    quisiera saber si es posible quitar el mensaje de advertencia de seguridad cuando se carga el applet.
    es muy molesto para un usuario, cada que se necesite el applet tener que ver esa ventana.

    gracias por tu colaboración.

    • En principio no. Puedes mejorar si el certificado está firmado por una CA de verdad, pero el navegador siempre va a dar una aviso de que se va a ejecutar algo.

      De hecho mi recomendación sería que dejes de usar Applets, ya que la tendencia es a que desaparezcan. Por lo pronto los navegadores van dejando de darles soporte, como Chrome. Pero además la propia Oracle ya está diciendo que los va a deprecar.

      Te recomendaría que buscaras otras alternativas basadas en HTML + JavaScript. Donde ahora se pueden hacer auténticas virguerías y encimas consigues ser multidispositivo.

DEJA UNA RESPUESTA

Por favor ingrese su comentario!

He leído y acepto la política de privacidad

Por favor ingrese su nombre aquí

Información básica acerca de la protección de datos

  • Responsable:
  • Finalidad:
  • Legitimación:
  • Destinatarios:
  • Derechos:
  • Más información: Puedes ampliar información acerca de la protección de datos en el siguiente enlace:política de privacidad