Cristhian Herrera

Residencia: Quito (Ecuador)

Cristhian.Herrera@gmail.com / cherrera@kruger.com.ec

Cuento con experiencia en el área de desarrollo de software y en la docencia académica. Dentro de la construcción de software he manejado las etapas de: análisis, diseño, personalización e implementación de aplicaciones bajo ambientes Cliente / Servidor e Internet.

Ver todos los tutoriales del autor

Fecha de publicación del tutorial: 2005-05-18

Tutorial visitado 25.738 veces Descargar en PDF
Cómo firmar Applets Java para Internet Explorer

Cómo firmar Applets Java para Internet Explorer, usando herramientas Microsoft

Fuente: http://www.iec.csic.es/criptonomicon/java/ie.html

Modificado por: Ing. Cristhian Herrera

 La ventaja de la creación de applets firmados para Internet Explorer es que no se necesita añadir código especial al fichero fuente del applet, ni realizar llamadas a funciones criptográficas. Para firmar cualquier applet no se requiere modificarlo en absoluto.

 Software Necesario en el cliente

 

  • Microsoft Internet Explorer 5.02 o superior
  • Microsoft JVM (Actualizada)

 Software Necesario para firmar applets y construir archivos contenedores (.cab)

 Antes de comenzar asegúrese de disponer de las siguientes herramientas:

  • cabarc.exe
  • cabinet.dll
  • cert2spc.exe
  • certmgr.exe
  • chktrust.exe
  • extract.exe
  • makecab.exe
  • makecert.exe
  • setreg.exe
  • signcode.exe
  • Javasign.dll
  • chkjava.exe

Las primeras pueden ser descargadas desde el sitio web de Microsoft, mientras que la utilidad “Javasign.dll” (que otorga permisos especiales a las clases java) y el programa “chkjava.exe” (que sirve para verificar la integridad de un contenedor de clases) están disponibles en el sitio de SUN y en otros mirrors de Internet ya que Microsoft dejó de soportarlas debido a sus problemas legales con SUN.

Estos archivos deben encontrarse en un PATH válido en el directorio del sistema de la máquina de desarrollo, por defecto este directorio es Winnt\System32.

Una vez que se dispone de las herramientas necesarias, se puede proceder a firmar applets siguiendo los siguientes pasos:

Paso 1: Crear un certificado para firmar applets

En el caso de Microsoft se necesita un certificado adecuado para su modelo de Authenticode. Existen muchas autoridades de certificación que distribuyen tales certificados, como VeriSign. Para uso personal se debe solicitar un certificado de clase 2 mientras que para uso comercial se necesita uno de clase 3.

Dado que el propósito de esta propuesta es experimentar con las firmas y no vender ni distribuir software firmado, no obstante se puede utilizar un certificado de prueba, que es gratis y se puede obtener a partir de las propias herramientas del SDK para Java.

En el directorio \bin\PackSign se encuentran las herramientas en línea de comandos que crearán un certificado de prueba. Por ejemplo, si se quiere crear un certificado para “MyTestCert” de la compañía “My Company Name”, se hará lo siguiente:

 

makecert -sk MyKeyName -n "CN=My Company Name" MyTestCert.cer

 

Este comando crea una pareja de claves, pública y privada, y un fichero de petición de certificado (MyTestCert.cert), a partir de la clave pública y la información de la compañía (campo CN). Para ello emplea la clave de registro de Windows “MyKeyName”. Si no se le suministra ninguna, makecert la crea.

 

Sin embargo, este certificado no sirve para firmar código. En su lugar se necesita un Certificado de Productor de Software (Software Publisher Certificate, SPC), el cual debe obtenerse de una Entidad Emisora de Certificados Digitales(EMCD), a la que se envía este certificado recién generado para que lo autentique y lo firme. En su defecto, y sólo con fines de prueba, existe otra herramienta del SDK que permite transformar el certificado anterior en uno válido, de la siguiente forma:

 

cert2spc MyTestCert.cer MyTestCert.spc

 

Ahora ya se puede utilizar este certificado, MyTestCert.spc, para firmar código, con prestaciones similares a las que poseería si hubiera procedido de una EMCD.

 

Paso 2: Crear el CAB

 

La firma basada en Authenticode funciona con ficheros armario (Cabinet, CAB). Los ficheros CAB constituyen simplemente una manera de compactar varios ficheros en uno solo en un formato que pueda entender IE. Para archivar varios ficheros se puede utilizar la herramienta cabarc o makecab. Por ejemplo, para comprimir los ficheros fich1.class y fich2.class en uno solo se utilizaría:

 

cabarc n fich.cab fich1.class fich2.class

 

donde la opción n indica que se quiere crear un nuevo fichero. También se pueden utilizar metacaracteres, incluir subdirectorios, etc.

 

Por ejemplo si se dispone de un applet llamado Mi_clase.java, capaz de escapar del recinto de seguridad y leer propiedades del sistema y escribir ficheros. Una vez compilado, se puede crear un fichero contenedor de la siguiente forma:

 

cabarc n Mi_clase.cab Mi_clase.class

 

Utilizando el comando makecab la instrucción sería:

 

makecab Mi_clase.class Mi_clase.cab

 

Paso 3: Firmar el CAB

 

El SDK incorpora la herramienta signcode para firmar código. En este paso conviene decidir qué nivel de seguridad se le desea asignar, ya que en función de dicho nivel y de la configuración de las zonas de seguridad en el navegador del usuario, el resultado será que se presenten más o menos ventanas pidiendo al usuario confirmación antes de permitir que el applet escape de los confines del recinto de seguridad (área “sandbox” de la Java Virtual Machine – JVM).

 

El comando para firmar el código es:

 

signcode -spc MyTestCert.spc -k MyKeyName Mi_clase.cab

 

Para confirmar que todo el proceso se ha realizado correctamente, se puede ejecutar el comando:

 

chkjava Mi_clase.cab ó también chktrust Mi_clase.cab

 

Por defecto, signcode requiere permisos totales, como se ha podido comprobar al ejecutar el comando chkjava. Si se desea, se puede añadir información de permisos de Java a la firma para controlar más finamente el tipo de recursos a los que tendrá acceso el applet, usando la opción -j JavaSign.dll de signcode, con la siguiente sintaxis:

 

signcode [opciones] -j JavaSign.dll [-jp nivel] [más opciones]

 

donde nivel es opcional y será uno de los seis siguientes: Low, Medium, High, Lowx, MediumX, HighX. Por defecto, el nivel de seguridad será Lowx.

 

Para el caso del ejemplo anterior la instrucción completa sería la siguiente:

 

signcode -j javasign.dll -jp low -spc MyTestCert.spc -k MyKeyName Mi_clase.cab

 

Si se desea configurar los permisos aún más granularmente, se pueden utilizar ficheros de configuración, con extensión .ini. Si después de la opción -jp no se incluye uno de los seis nombres anteriores, signcode entenderá que lo que venga a continuación es el nombre de un fichero .ini con la configuración. Para confeccionar estos ficheros de configuración existe una herramienta gráfica incluida en el SDK, llamada PIniEdit. A continuación se muestra un ejemplo de un fichero tal, que permitiría leer y escribir todos los ficheros del directorio c:\temp, excepto los documentos de Word (extensión .doc):

 

[com.ms.security.permissions.FileIOPermission]
Version=2
IncludeRead=c:\temp\*.*;
IncludeWrite=c:\temp\*.*;
ExcludeRead=c:\temp\*.doc;

 

Junto con PIniEdit se distribuye un fichero con instrucciones precisas sobre su uso. Se puede ampliar la información respecto a todos los demás aspectos de la firma de código escrito en Java en la página de Microsoft.

 

Paso 4: Incrustar el CAB en la página web

 

Ya sólo queda incluir las etiquetas correctas para que se visualice el applet sin problemas, lo cual exige variar ligeramente el formato de la etiqueta <applet> convencional:

 

<applet code="Mi_clase.class">

<param name="cabbase" value="Mi_clase.cab">

</applet>

 

Es importante eliminar el fichero Mi_clase.class original del directorio, ya que en caso contrario el navegador lo cargaría, en lugar del firmado. El applet ya está listo para ejecutarse en Internet Explorer. En adelante, cuando el visitante a su web cargue la página donde se aloja el applet firmado, le aparecerá una advertencia de seguridad solicitándole su aprobación para instalarlo y ejecutarlo. Si el visitante acepta, el applet se ejecutará para acceder sin restricciones a todos aquellos recursos que se solicitaron en el fichero .ini de permisos creado mediante la herramienta PIniEdit y utilizado en el proceso de firmado. Puede examinar con más detalle los permisos solicitados, para decidir si aprobar o no su ejecución. Si el visitante deniega los permisos, entonces el applet no se ejecuta en absoluto. También puede comprobar el certificado si así lo requiere.

 

Establecer los permisos de seguridad JAVA para Internet Explorer

 

En algunos casos será necesario además configurar los permisos de Internet Explorer como se muestra a continuación:

 En el escritorio de Windows haga clic derecho sobre el icono del Internet Explorer, luego escoja la viñeta de “Seguridad”, en esta ubique la zona de navegación que desea personalizar por ejemplo la zona “Internet”.

 Presione el botón “Personalizar nivel...” y se abrirá una nueva ventana que dice “Configuración de seguridad” en ella busque la sección correspondiente a “Microsoft VM – Permisos de Java” y haga clic en “Personalizada”, luego presione el botón “Configuración de Java Personal...”

 

 

Se presentará una subpantalla que contiene una viñeta que dice “Internet” como se muestra a continuación:

 

 

En esta ventana tenemos dos categorías de opciones referentes a los applets firmados y aquellos no firmados. Si dispone de un applet firmado con un certificado digital válido entonces no es necesario que modifique los permisos en la categoría “Contenido sin firmar”.

 

Permisos a modificar en el Contenido sin firmar

 

Etiqueta

Valor

Ejecutar el contenido sin firmar

Ejecutar en el recinto de seguridad

Tener acceso a todos los archivos

Desactivar

Tener acceso a todas las direcciones de red

Activar

Ejecutar

Activar

Dialogs

Activar

Información del sistema

Activar

 

Permisos a modificar en el Contenido sin firmado

 

Etiqueta

Valor

Ejecutar el contenido firmado

Preguntar al usuario

Tener acceso a todos los archivos

Desactivar

Tener acceso a todas las direcciones de red

Preguntar al usuario

Ejecutar

Preguntar al usuario

Dialogs

Preguntar al usuario

Información del sistema

Preguntar al usuario

 

A continuación puedes evaluarlo:

Regístrate para evaluarlo

Por favor, vota +1 o compártelo si te pareció interesante

Share |
Anímate y coméntanos lo que pienses sobre este TUTORIAL: