Applets Firmados

Se peude definir un fichero de policía para requerir una firma de todos los applets o aplicaciones que intenten ejecutarse con el fichero de policía. La firma es una forma de verificar que el applet o la aplicación vienen de una fuente fiable y que puede ser creíada para ejecutarse con los permisos concedidos por el fichero de policía.

Si un fichero de policía requiere una firma, un applet o una aplicación pueden obtener el acceso concedido por el fichero de policía sólo si tienen la firma correcta. Si el applet o la aplicación tienen una firma errónea o no tienen firma, no obtendrán el acceso al fichero.

Esta sección muestra un ejemplo de firma de una applet, verificación de esa firma, y ejecución del applet con un fichero de policía.


Ejemplo del Applet Firmado

El fichero de policía para conceder accesos puede configurarse para que requiera o no una firma. Si se requiere una firma, el applet tiene que estár envuelto en un fichero JAR antes de poder ser firmado. Este ejemplo muestra cómo firmar y conceder los permisos a un applet para que pueda crear un fichero demo.ini en el directorio Home del usuario cuando se ejecuta en el AppletViewer.

Estos ficheros son los usados en el ejemplo. Podemos copiarlos o crearlos en nuestro directorio de trabajo.

Normalmente un applet se envulve y se firma mediante un desarrollador de intranet y es manejado por el usuario final que verifica la firma y ejecuta el applet. En este ejemplo, el desarrollador de intranet performa los pasos 1 al 5, y el usuario final realiza lo pasos del 6 al 8. Para mantener las cosas sencillas todos los pasos ocurren en el mismo directorio.
  1. Compilar el Applet.
  2. Crear el Fichero JAR.
  3. Generar las Claves.
  4. Firmar el Fichero JAR.
  5. Exportar el Certificado de Clave Pública.
  6. Importar el Certificado como Certificado Verdadero.
  7. Crear el Fichero de Policía.
  8. Ejecutar el Applet.

Desarrollador de Intranet

El desarrollador de intranet, envuelve el ejecutable del applet en un fichero JAR, lo firma y exporta el certificado de la clave pública.

1: Compilar el Applet

En su directorio de trabajo el desarrollador de intranet, usa el comando javac para compilar la clase SignedAppletDemo.java. La salida del comando javac es el SignedAppletDemo.class.

javac SignedAppletDemo.java

2: Crear el Fichero JAR

El desarrollador de intranet almacena el fichero SignedAppletDemo.class compilado en un fichero JAR. La opción -cvf del comando jar crea un nuevo archivo (c), usando modo verboso (v), y especifica el nombre del fichero archivado (f). El nombre del fichero es SignedApplet.jar.

jar cvf SignedApplet.jar SignedAppletDemo.class

3: Generar las Claves

Un fichero JAR se firma con la clave privada del creador del fichero JAR y la firma es verificada por el receptor del fichero JAR con el clave pública de la pareja. El certificado es una sentencia del propietario de la clave privada indicando que la clave pública de la pareja tiene una valor particular para que la persona que la está usando puede estar segura de que es auténtica. Las claves pública y privada deben existir en el almacen de calves antes de que se puede usar jarsigner para firmar o verificar la firma de un fichero JAR.

El desarrollador crea un base de datos keystore llamada compstore que tiene una entrada para cada pareja de claves recientemente generadas con la clave pública en un certificado usando el comando keytool.

En su directorio de trabajo, el desarrollador crea una base de datos keystore y genera las claves:

keytool -genkey -alias signFiles -keystore compstore 
	-keypass kpi135 -dname "cn=jones" 
	-storepass ab987c
Este comando keytool -genkey invoca una pareja de claves que están identificadas con el Alias signFiles. Subsecuentes llamadas al comando keytool que usarán este alias y la password (-keypass kpi135) para acceder a la clave privada en el par generado.

La pareja de claves generadas se almacena en un base de datos keystore llamada compstore (-keystore compstore) en el directorio actual y accedida con la password del compstore (-storepass ab987c).

La opción -dname "cn=jones" especifica un nombre distinguido X.500 con un valor de nombre común (cn). X.500 Distinguished Names identifica entidades para certificados X.509. En este ejemplo, el desarrollador usa su último nombre, Jones, para el nombre común. Podría haber usado cualquier otro nombre para este propósito.

Podemos ver todos las opciones y parámetros de ketool tecleando:

keytool -help

4: Firmar el Fichero JAR

JAR Signer es una herramienta de la línea de comandos para firmar y verificar la firma de ficheros JAR. En su directorio de trabajo, el desarrollado usa jarsigner para firmar una copia del fichero SignedApplet.jar.
jarsigner -keystore compstore -storepass ab987c 
        -keypass kpi135 
	-signedjar 
	SSignedApplet.jar SignedApplet.jar signFiles
Las opciones -storepass ab987c y -keystore compstore especifican la base de datos keystore y password donde se almacena la clave privada pra firmar el fichero JAR. La opción -keypass kpi135 es la password de la clave privada, SSignedApplet.jar es el nombre del fichero JAR firmado, y signFiles es el alias de la clave privada. jarsigner extrae el certificado desde la base de datos cuya entrada es signFiles y lo adjunta a la firma del fichero JAR firmado.

5: Exportar el Certificado de la Clave Pública

El certificado de la clave pública se envía con el fichero JAR al usuario final que usará el applet. Esta persona usa el certificado para autentificar la firma del fichero JAR. Un certificado se envía exportandolo desde la base de datos compstore.

En su directorio de trabajo, el desarrollador usa keytool para copiar el certificado desde compstore a un fichero llamado CompanyCer.cer de esta forma:

keytool -export -keystore compstore -storepass ab987c  
	-alias signFiles -file CompanyCer.cer
Como el último paso, el desarrollador coloca el fichero JAR y el certificado en un directorio de distribución o en una página web.

Usuario Final

El usuario final descarga el fichero JAR desde el directorio de distribución, importa el certificado, crea un fichero de policía concediendo los accesos al applet, y ejecuta el applet.

6: Importar el Certificado como Certificado Verdadero

El usuario descarga SSignedApplet.jar y CompanyCer.cer a su directorio home. Ahora debe crear un abase de datos keystore (raystore) e importar el certificado en ella usando el aplias company. El usuario usa keytool en su directorio home para hacer esto:
keytool -import -alias company -file 
        CompanyCer.cer -keystore 
	raystore -storepass abcdefgh

7: Crear el Fichero de Policía

El fichero de policía concede al fichero SSignedApplet.jar firmado por el alias company permiso para crear demo.ini (y no otro fichero) en el directorio home del usuario.

El usuario crea el fichero de policía en su directorio home usando policytool o un editor ASCII.

keystore "/home/ray/raystore";

// A sample policy file that lets a program 
// create demo.ini in user's home directory
// Satya N Dodda

grant SignedBy "company" {
  permission java.util.PropertyPermission 
    "user.home", "read";
  permission java.io.FilePermission 
    "${user.home}/demo.ini", "write";
};

8: Ejecutar el Applet en el AppletViewer

AppletViewer conecta con documentos HTML y los recursos especificados en la llamada a appletviewer, y muestra el applet en su propia ventana. Para ejecutar el ejemplo, el usuario copia el fichero JAR firmado y el fichero HTML en /home/aURL/public_html y llama al Appletviewer desde su directorio raíz de esta forma:
appletviewer -J-Djava.security.policy=Write.jp 
	http://aURL.com/SignedApplet.html
Nota: Se teclea todo en una línea y se pone un espacio en blanco después de Write.jp
La opción -J-Djava.security.policy=Write.jp le dice al AppletViewer que ejecute el applet referenciado en el fichero SignedApplet.html con el fichero de policía Write.jp.

Nota: El fichero de policía puede almacenarse en el servidor y especificarse en la invocación al appletviewer como una URL.

Ejecutar una Aplicación con un Fichero de Policía

Esta invocación de aplicación restringe MyProgram a un entorno cerado de la misma forma en que se restringen los applet, pero permite los accesos especificados en el fichero de policía polfile.
java -Djava.security.manager
        -Djava.security.policy=polfile MyProgram

Applets Firmados en JDK 1.1

Los applets firmados del JDK 1.1 pueden acceser a recursos del sistema local si éste está configurado para permitirlo. Puedes ver la páginas ejemplos de Applets Firmados del JDK 1.1 para más detalles.

Ozito