Cómo configurar en Internet Explorer la confianza en el código Java

Nota
Microsoft ya no distribuye la máquina virtual Java de Microsoft (MSJVM, Microsoft Java Virtual Machine) ni el SDK para Java de Microsoft. No se realizará ninguna mejora de MSJVM ni del SDK para Java. Para obtener información adicional acerca de recursos para desarrolladores de Java, visite el siguiente sitio Web de Microsoft:

Resumen

Debe tener en cuenta varios factores cuando desee configurar el código Java para que se ejecute con total confianza, con confianza parcial o sin confianza en Microsoft Internet Explorer. En este artículo se explican muchos de esos factores y se describen algunos recursos que pueden ayudarle a que el código Java tenga el nivel adecuado de confianza al ejecutarse en el explorador.

Más información

Cargador de clases

Es importante entender la importancia del cargador de clases en Java. El cargador de clases controla gran parte de la seguridad y el acceso otorgado a una clase. En el siguiente artículo de Microsoft Knowledge Base se explica cuándo la máquina virtual de Microsoft (Microsoft VM) utiliza diferentes cargadores:
177168 Cómo busca la máquina virtual clases de Java

Con esta información puede tomar decisiones acertadas en lo referente a qué método para obtener permisos adicionales es más adecuado para un proyecto.

Qué significa ser de confianza

El término de confianza significa que el código ya no está confinado al recinto de seguridad de Java. El recinto de seguridad evita que código en el que no se confía realice correctamente operaciones de confianza, por ejemplo:
  • Llamar al código nativo
  • Utilizar COM
  • Utilizar J/Direct
  • Conectarse a equipos remotos
  • Imprimir
  • Utilizar JDBC
  • Crear ventanas de nivel superior que no tengan la advertencia de subprograma
Para que las clases se ejecuten con permisos superiores a los del modo de recinto de seguridad, deben entregarse al equipo cliente en un archivo contenedor (CAB) firmado. Al firmar el archivo CAB también debe especificar los permisos que requieren las clases que contiene. En Microsoft Internet Explorer 4.x existen tres niveles de permisos predefinidos (BAJO, MEDIO y ALTO):
  • El permiso ALTO equivale al recinto de seguridad de Java. La única ventaja de iniciar sesión en este escenario es que puede garantizar a un usuario del código que ningún otro usuario lo ha modificado.
  • El permiso MEDIO es igual que el ALTO, pero permite el acceso a un área de borrador del equipo local.
  • El permiso BAJO concede permiso esencialmente a todas las operaciones enumeradas anteriormente.

Fijar permisos

En el siguiente artículo de Knowledge Base se ofrece información suficiente para comprender cuándo, por qué y cómo debe fijar permisos en el código Java:
175622 Excepción SecurityExceptionEx al ejecutar un subprograma Java

Crear el archivo contenedor (CAB)

Ahora que entiende los conceptos de cargadores, confianza y permisos, el próximo paso consiste en saber cómo crear el archivo contenedor (CAB). En esta fase, necesita decidir si desea instalar el código en el equipo del usuario o simplemente empaquetar el código en un archivo CAB para que la descarga sea más rápida en cada visita a la página.

Si no desea instalar el código en el equipo local, puede simplemente crear un archivo CAB mediante la utilidad Cabarc.exe y hacer referencia al archivo CAB desde un parámetro pasado al subprograma desde HTML. Este procedimiento se muestra más adelante en el ejemplo 1.

Nota
Este método no requiere que firme el archivo CAB si no necesita que el código se ejecute como de confianza. Sin embargo, sigue ofreciéndole los beneficios de descargar un único archivo comprimido en vez de archivos de clase individuales.

Existen dos métodos para instalar el código en el equipo local. Uno consiste en crear una unidad de distribución (DU) mediante la utilidad Dubuild.exe del SDK de Java. Esta utilidad crea un archivo CAB e incluye un archivo .osd generado automáticamente. Consulte el ejemplo 2 más adelante en este artículo.

El otro método para instalar el código en el equipo local es utilizar un archivo .inf. Este método es más manual y más propenso a errores, pero tiene la ventaja de ser el único método que funciona en Internet Explorer 3.x y posteriores. Consulte el ejemplo 3 más adelante en este artículo.

Cada uno de estos tres métodos tiene la ventaja de descargar el código en la primera visita a la página y no requerir otra descarga en las siguientes visitas a menos que haya disponible una versión más reciente. No obstante, todos requieren cierta cantidad de espacio permanente en el disco duro del usuario.

Utilizar una firma digital en un archivo CAB

Tiene que firmar el archivo CAB cada vez que el código tenga que hacer algo fuera del recinto de seguridad de Java o siempre que desee instalar código en el equipo local desde una página Web. Los archivos CAB se firman mediante la utilidad Signcode.exe del SDK de Java. Los ejemplos que encontrará más adelante en este artículo muestran algunos escenarios de firma comunes. Puede encontrar ejemplos e información adicional en el tema "Signing Cabinet Files with Java Permissions" de la documentación del SDK de Java, en la siguiente ubicación: En el SDK, haga clic en Índice y, a continuación, haga clic en S. Scroll para encontrar "Signing Cabinet Files with Java Permissions".


A continuación se ofrecen algunos puntos clave que debe tener en cuenta:
  • Se han agregado permisos más granulares de Java a la máquina virtual de Microsoft y a las herramientas de firma del SDK de Java 2.0 y posteriores.
  • El uso de permisos más granulares puede ayudar a limitar la exposición como desarrollador de un paquete Java al reducir el acceso permitido al mínimo que requiera un proyecto.
  • Los permisos más granulares se solicitan con un archivo .ini en el momento de la firma. Consulte el tema del SDK de Java titulado "Java Permissions .ini Values Reference" para obtener información adicional.
Por último, puede utilizar un certificado de prueba sólo para fines de desarrollo (como se muestra en los ejemplos más adelante en este artículo) pero es conveniente disponer de un certificado auténtico antes de implementar la aplicación. Puede obtener un certificado auténtico mediante una entidad emisora. Actualmente VeriSign emite certificados de total garantía para utilizarlos con Authenticode. Puede ponerse en contacto con VeriSign en la siguiente ubicación: Para obtener más información acerca de cómo crear, ver y administrar certificados, visite el siguiente sitio Web de Microsoft Developer Network (MSDN):

Etiquetas para hacer referencia a un archivo CAB firmado

Hay varias opciones para hacer referencia a un archivo CAB firmado en HTML. La siguiente es una lista y una breve comparación de los diferentes métodos:
  • parámetros cabbase de una etiqueta APPLET
  • parámetros contenedores de una etiqueta APPLET
  • parámetros useslibrary, useslibrarycodebase y useslibraryversion de una etiqueta APPLET
  • parámetros cabbase de una etiqueta OBJECT
  • parámetros contenedores de una etiqueta OBJECT
  • parámetros useslibrary, useslibrarycodebase y useslibraryversion de una etiqueta OBJECT

Código de confianza en Internet Explorer para Macintosh

Authenticode no se admite en Internet Explorer para Macintosh. Para habilitar el acceso a código descargado fuera del recinto de seguridad de Java, el usuario debe agregar el servidor a la lista Sitios de confianza y, a continuación, establecer los permisos de sitio que requiera el código.

EJEMPLOS

Puede utilizar la clase Java siguiente con los tres ejemplos cortos que se muestran a continuación. Corte y pegue este texto en un archivo denominado Simple.java.

Nota
Asegúrese de que dispone de una versión del archivo jvc.exe en la ruta de acceso del SDK para Java 2.0 (compilación 4337) o posterior. Esta clase simplemente fija el permiso y muestra un cuadro de mensaje de Win32 al ejecutarse:
package simple; import com.ms.security.*; public class Simple extends java.applet.Applet { public void init() { try { if (Class.forName("com.ms.security.PolicyEngine") != null) PolicyEngine.assertPermission(PermissionID.SYSTEM); } catch (Throwable cnfe) {  } try { MessageBox(0, "Se llamó correctamente a MessageBox.", "Java", 0); } catch (UnsatisfiedLinkError ule) { System.err.println("Capturada la excepción: " + ule); System.err.println("Probablemente una versión equivocada del compilador de Java."); } }

/** @dll.import("USER32") */ static native int MessageBox(int hwndOwner, String text, String title, int style); }
Nota
El avance de línea se inserta en las líneas de comandos de Signcode.exe a continuación. Estas líneas de comando son demasiado largas para caber en una línea en Microsoft Knowledge Base, pero deben editarse en los archivos de proceso por lotes para que ocupen una única línea.

Prueba 1 - Simple1

Este ejemplo muestra un archivo CAB firmado que no se instala en el equipo local.

Puede utilizar los siguientes comandos para compilar Simple.java, crear un archivo CAB que contenga Simple.class, habilitar la raíz de prueba en el equipo local, crear un certificado de prueba, firmar el archivo CAB con permisos Java de nivel BAJO mediante el certificado de prueba e iniciar la página Simple1.html en el explorador. Corte y pegue estos comandos en un archivo de proceso por lotes llamado go1.bat y guárdelo en el mismo directorio que el archivo Simple.java creado anteriormente:
jvc /d . Simple.java cabarc -p n mycab1.cab simple/Simple.class del simple\Simple.class setreg 1 true makecert -sk MyKeyName -n "CN=El nombre de mi editor" MyTestCert.cer cert2spc MyTestCert.cer MyTestCert.spc signcode -j javasign.dll -jp LOW -spc MyTestCert.spc -k MyKeyName mycab1.cab start Simple1.html
Antes de ejecutar go1.bat, corte y pegue el código HTML siguiente en un archivo denominado Simple1.html y colóquelo en el mismo directorio que los archivos denominados Simple.java y go1.bat que se han creado previamente:
<HTML> <APPLET CODE="simple.Simple" WIDTH=100 HEIGHT=100> <PARAM NAME="cabbase" VALUE="mycab1.cab"> </APPLET> </HTML>
Nota
Un parámetro "cabinets" funciona de forma intercambiable con un parámetro "cabbase" en los equipos que ejecutan Internet Explorer 4.0 y posterior. El parámetro "cabinets" tiene la funcionalidad adicional de permitir hacer referencia a varios archivos CAB desde la misma etiqueta APPLET.

Prueba 2 - Simple2

Este ejemplo muestra un archivo CAB firmado que se instala en el Administrador de paquetes de Java (JPM) en el equipo local.

Puede utilizar los siguientes comandos para compilar Simple.java, crear un archivo CAB que contenga Simple.class y un archivo .osd generado en la compilación, habilitar la raíz de prueba en el equipo local, crear un certificado de prueba, firmar el archivo CAB con permisos Java de nivel BAJO mediante el certificado de prueba e iniciar la página Simple2.html en el explorador. Corte y pegue estos comandos en un archivo de proceso por lotes llamado go2.bat y guárdelo en el mismo directorio que el archivo Simple.java creado anteriormente:
jvc /d . Simple.java dubuild mycab2.cab . /D "JPM Simple2" /I *.class /V 1,1,23,0 del simple\Simple.class setreg 1 true makecert -sk MyKeyName -n "CN=El nombre de mi editor" MyTestCert.cer cert2spc MyTestCert.cer MyTestCert.spc signcode -j javasign.dll -jp LOW -spc MyTestCert.spc -k MyKeyName mycab2.cab start Simple2.html
Antes de ejecutar go2.bat, corte y pegue el código HTML siguiente en un archivo denominado Simple2.html y colóquelo en el mismo directorio que los archivos denominados Simple.java y go2.bat que se han creado previamente:
<HTML> <APPLET code="simple.Simple" WIDTH=100 HEIGHT=100> <PARAM NAME=useslibrary VALUE="JPM Simple2"> <PARAM NAME=useslibrarycodebase VALUE="mycab2.cab"> <PARAM NAME=useslibraryversion VALUE="1,1,23,0"> </APPLET> </HTML>
Una vez instalado un paquete en el equipo local con JPM, estará presente en la carpeta "<windir>\Archivos de programa descargados". Utilice esta carpeta para ver y quitar paquetes que se instalen mediante Internet Explorer.

Prueba 3 - Simple3

Este ejemplo muestra un archivo CAB firmado que instala el archivo Simple.class en el directorio <windir>\java\lib\simple del equipo local. Puede utilizar los siguientes comandos para compilar Simple.java, crear un archivo CAB que contenga Simple.class y un archivo .inf que haya creado, habilitar la raíz de prueba en el equipo local, crear un certificado de prueba, firmar el archivo CAB con permisos Java de nivel BAJO mediante el certificado de prueba e iniciar la página Simple3.html en el explorador. Corte y pegue estos comandos en un archivo de proceso por lotes llamado go3.bat y guárdelo en el mismo directorio que el archivo Simple.java creado anteriormente:
jvc /d . Simple.java cabarc -p n mycab3.inner.cab simple/Simple.class del simple\Simple.class cabarc n mycab3.cab mycab3.inner.cab simple.inf setreg 1 true makecert -sk MyKeyName -n "CN=El nombre de mi editor" MyTestCert.cer cert2spc MyTestCert.cer MyTestCert.spc signcode -j javasign.dll -jp LOWX -spc MyTestCert.spc -k MyKeyName mycab3.cab start Simple3.html
Antes de ejecutar go3.bat, tiene que cortar y pegar el código HTML siguiente en un archivo denominado Simple3.html y colocarlo en el mismo directorio que los archivos denominados Simple.java y go3.bat que se han creado previamente:
<HTML> <OBJECT    CLASSID="clsid:99999999-9999-9999-9999-999999999999"
CODEBASE="mycab3.cab#Version=1,1,23,0"> </OBJECT>

<APPLET CODE="simple.Simple" WIDTH=100 HEIGHT=100> </APPLET> </HTML>
Nota
Reemplace el guid por encima de "99999999-9999-9999-9999-999999999999" con el creado para el archivo .inf en las instrucciones siguientes.

Siga estos pasos para crear el archivo Simple.inf que se va a incluir en el archivo CAB externo:
  1. Copie el archivo master.inf del directorio <sdk-dir>\bin\packsign.
  2. Cambie el nombre de la nueva copia de Master.inf a Simple.inf.
  3. Abra el archivo Simple.inf en un editor de texto.
  4. Cambie las siguientes líneas de:
    run=extrac32.exe /e /a /y /l %49000% CabFileName.cab
    En:
    run=extrac32.exe /e /a /y /l %49000% mycab3.inner.cab


    De:
    InfFile=master.inf
    En:
    InfFile=simple.inf


    De:
    ClassId = "{99999999-9999-9999-9999-999999999999 }"
    En:
    1. Ejecute guidgen.exe (del directorio <sdk-dir>\bin).
    2. Seleccione la opción número 4 Registry Format.
    3. Presione el botón New GUID.
    4. Presione el botón Copy.
    5. Pegue el nuevo GUID del Portapapeles en la línea anterior del archivo Simple.inf file y también en el código HTML anterior.


    De:
    PackageName="name"
    En:
    PackageName="SIMPLE3"


    De:
    HKLM,"SOFTWARE\Classes\CLSID\%ClassId%\InstalledVersion",,,"aa,bb,cc,dd"
    En:
    HKLM,"SOFTWARE\Classes\CLSID\%ClassId%\InstalledVersion",,,"1,1,23,0"


    De:
    HKLM,"Software\Classes\CLSID\%ClassId%\InstalledVersion","Path",,  "%49000%\<filename>"
    En:
    HKLM,"Software\Classes\CLSID\%ClassId%\InstalledVersion","Path",,  "%49000%\simple\Simple.class"
  5. Guarde los cambios realizados en el archivo Simple.inf.
  6. Ejecute el archivo go3.bat creado anteriormente.
Nota 1
Después de ejecutar los ejemplos anteriores, debe deshabilitar la raíz de las pruebas en el equipo local ejecutando "setreg.exe 1 false". De este modo evitará que Internet Explorer confunda la raíz de prueba con un certificado real. La raíz de prueba se puede volver a habilitar en cualquier momento con setreg.exe 1 true.

Nota 2
Considere lo siguiente al firmar el archivo CAB para usarse en un entorno de producción en lugar de en pruebas:
  1. Todos los comandos anteriores generan el certificado y firman con él inmediatamente. La mayoría de los usuarios vuelven a crear sus certificados cada vez que generan y firman un archivo CAB, pero esto no se hace si el archivo CAB se va a publicar. Cuando se adquiere y utiliza un certificado, debe llevarse un control minucioso del mismo.

    Los comandos anteriores crean un certificado de prueba, pero sólo necesita utilizarlos si no ha adquirido uno. Ésta es la manera de firmar si se dispone de un archivo .pvk en vez de almacenar la clave en el Registro, debido a que algunos usuarios reciben sus claves de esta forma. Sustituya "-v NombreDeMiCert.pvk" por "-k NombreDeClave".
  2. Cuando ejecute el comando signcode.exe, es posible que deba agregar la opción -t http://timestamp.verisign.com/scripts/timstamp.dll para marcar la firma correctamente con la fecha y hora en el archivo CAB. Se ha omitido de estos ejemplos para permitir que el comando dé los resultados adecuados a los usuarios que no estén continuamente conectados a Internet.
Nota 3
Microsoft Visual J++ 6.0 proporciona el empaquetado sencillo de los componentes de Java. Consulte la ficha Resultado del cuadro de diálogo Propiedades del proyecto y la documentación del producto para obtener información adicional. Las unidades de distribución creadas con Visual J++ 6.0 utilizan el Administrador de paquetes de Java (JPM) para instalar paquetes.

Nota 4
Puede configurar Internet Explorer 4.x o posterior para tratar el código sin firmar como si tuviera más permisos que los correspondientes al recinto de seguridad de forma predeterminada. Sólo debe hacer esto en situaciones especiales como la intranet o para realizar pruebas. Si decide configurar Internet Explorer de esta manera, tenga en cuenta que ya no dispondrá de la protección contra el código de Java malintencionado que se ejecute en su equipo. Por ejemplo, para tratar automáticamente todos los subprogramas de Java como de total confianza en la zona de intranet, efectúe los siguientes pasos:
  1. Vaya a la ficha Seguridad en el cuadro de diálogo Propiedades de Internet.
  2. Seleccione la zona Intranet local.
  3. Seleccione la opción Personalizar y haga clic en Configuración.
  4. Busque el elemento Permisos de Java en la lista y elija Personalizar.
  5. Seleccione Personalizar y, a continuación, haga clic en Configuración personalizada de Java.
  6. Vaya a la ficha Editar permisos.
  7. En Ejecutar contenido no firmado, haga clic en Habilitar.

Referencias

Para obtener información adicional sobre cuestiones de seguridad y paquetes de la máquina virtual de Microsoft, haga clic en los números de artículo siguientes para ver los artículos de Microsoft Knowledge Base:
175622 Excepción SecurityExceptionEx al ejecutar un subprograma Java

177168 Cómo busca la máquina virtual clases de Java

179652 Cómo implementar Java en Internet Explorer 4.0 y en Netscape 4.0

181374 Artículos relacionados con la descarga de componentes

Para obtener más información acerca de cuestiones relacionadas con la descarga de código, visite el siguiente sitio Web de MSDN: Para obtener los artículos más recientes de Knowledge Base y otra información de soporte técnico sobre Visual J++ y el SDK de Java, consulte las páginas siguientes del sitio de soporte técnico de Microsoft:
Propiedades

Id. de artículo: 193877 - Última revisión: 03/24/2006 - Revisión: 1

Comentarios