Cómo obtener acceso completo al sistema con Java Web Start

Cuando despliegas aplicaciones a través de Java Web Start de Sun, no pueden dañar el sistema del usuario final porque se ejecutan en un sandbox, un espacio restringido que limita el acceso a los recursos del sistema. Aunque el mecanismo de sandbox es generalmente beneficioso, a veces puede limitar a los desarrolladores al imponer restricciones que impiden la funcionalidad básica de la aplicación. Si estás escribiendo un programa de juego de tres en raya, puedes adaptarte a la restricción del sandbox de no tener acceso al sistema de archivos local. Pero si estás escribiendo un explorador de archivos, necesitarás más acceso del que se proporciona de forma predeterminada.

Afortunadamente, puedes utilizar algunos trucos para obtener el permiso del usuario para escapar del contenedor de seguridad impuesto por Web Start. Veamos cómo funcionan los sandboxes y luego veremos cómo puedes sortearlos con tus aplicaciones desplegadas a través de Web Start.

Índice de Contenido
  1. Comprendiendo los conceptos básicos de Web Start
  2. ¿Qué es un sandbox?
  3. Guía del Desarrollador de Aplicaciones Web Start
  4. Acceso al sistema de archivos a través de los servicios JNLP
  5. Ejecución fuera del sandbox

Comprendiendo los conceptos básicos de Web Start

La primera parte de esta serie cubrió los conceptos básicos de la tecnología Java Web Start de Sun, incluyendo los conceptos y el empaquetado de aplicaciones para el despliegue con Web Start. En esta entrega, detallaré las técnicas disponibles para los desarrolladores de aplicaciones que desean hacer un uso más amplio de los recursos del sistema que los permitidos por el sandbox de ejecución de Web Start de forma predeterminada. Si no estás familiarizado con Java Web Start, el primer artículo te dará algunos antecedentes.

¿Qué es un sandbox?

Un sandbox de aplicaciones es un espacio en el que los programas pueden ejecutarse con un acceso limitado a los recursos del sistema, en comparación con las circunstancias normales. Los sistemas operativos modernos ejecutan todas las aplicaciones en un sandbox de alguna forma, lo que evita que accedan y corrompan la memoria fuera de las regiones asignadas. Los sandboxes de ejecución de Java operan a un nivel mucho más alto que sus contrapartes del sistema operativo, pero cumplen esencialmente el mismo papel: impiden que las aplicaciones hagan un uso excesivo del sistema.

Cómo trabajar con el Document Object Model (DOM) en XMLCómo trabajar con el Document Object Model (DOM) en XML

El primer sandbox con el que la mayoría de los desarrolladores de Java se encuentran es el que contiene los applets dentro de un navegador web. El comportamiento predeterminado, el más restrictivo, prohíbe casi todo el acceso a los recursos del sistema, como el sistema de archivos. Se prohíbe la conectividad en red. Incluso se filtran las variables de entorno del sistema.

El sandbox de aplicaciones de Web Start es un pariente cercano de los sandboxes originales de applets, con algunas modificaciones encontradas en el SecurityManager de Java 1.2. Las aplicaciones lanzadas a través de Web Start descubrirán que muchos métodos que funcionan correctamente directamente en la máquina virtual de Java generarán SecurityExceptions dentro del sandbox impuesto por Web Start. Las aplicaciones que necesiten funcionar fuera del sandbox tienen dos opciones: los servicios Java Network Launching Protocol (JNLP) y la firma de la aplicación.

Servicios JNLP
Aunque los diseñadores de Web Start conocían las frustraciones de los desarrolladores obligados a vivir dentro de las limitaciones del sandbox de applets, también reconocieron que la mayoría de las aplicaciones no necesitan ni quieren acceso completo e ilimitado a los recursos del sistema. Con frecuencia, las aplicaciones solo desean persistir un poco de datos entre diferentes ejecuciones. Ahí es donde los servicios JNLP resultan útiles.

Los contenedores de aplicaciones Web Start pueden ofrecer algunos o todos los servicios JNLP, y las buenas aplicaciones se degradan de forma elegante cuando los servicios no están disponibles. Cada servicio JNLP tiene un nombre y una interfaz correspondiente. Dos de los servicios más útiles son FileOpenService y FileSaveService, que permiten leer y escribir archivos respectivamente.

Guía del Desarrollador de Aplicaciones Web Start

Puedes explorar la sintaxis y la API de JNLP en la Guía del Desarrollador de Aplicaciones Web Start de Sun.

Apache Jakarta Commons Lang: Centraliza tus funciones de utilidad en Java

Acceso al sistema de archivos a través de los servicios JNLP

Por defecto, el sandbox de Web Start bloquea el acceso al sistema de archivos a través de los mecanismos convencionales de acceso de java.io; sin embargo, mediante la interacción del usuario para cada lectura y escritura, se pueden utilizar los servicios FileOpenService y FileSaveService para obtener este acceso con el conocimiento y el permiso del usuario.

FileOpenService
FileOpenService proporciona la capacidad de leer archivos. Dado que no se puede acceder al sistema de archivos mediante los mecanismos de interrogación de sistemas de archivos de java.io en las aplicaciones Web Start, no hay forma de asociar una ruta de archivo de cadena con un recurso de archivo en el sistema ni de crear un FileInputStream para ese recurso aunque pudieras. FileOpenService proporciona un método que abre un JFileChooser en pantalla. Se devuelve un objeto FileContents que proporciona acceso al contenido del archivo seleccionado por el usuario. Puedes encontrar un ejemplo en el listado A. Cabe destacar que en ningún momento la aplicación que llama recibe información sobre la ubicación real del archivo en el sistema de archivos del usuario.

FileSaveService
FileSaveService proporciona una funcionalidad correspondiente para escribir archivos. Al invocarse, un JFileChooser solicita al usuario una ubicación para guardar los datos. Los datos a guardar se proporcionan como un objeto FileContents, como se muestra en el listado B. Nuevamente, en ningún momento la aplicación que llama recibe información sobre la estructura del sistema de archivos subyacente.

Firma de la aplicación
Los servicios JNLP funcionan al exigir al usuario que apruebe cada violación de las restricciones del sandbox de Web Start. La firma de la aplicación, por otro lado, se basa en convencer al usuario de que el autor de la aplicación es quien dice ser y, posteriormente, en pedir al usuario que confíe en el código del autor con acceso completo a todos los recursos del sistema disponibles para la máquina virtual.

El primer paso se logra mediante la firma de los recursos de una aplicación, principalmente los archivos de archivo Java (JAR). Cada kit de desarrollo de Java viene con dos aplicaciones poco utilizadas: keytool y jarsigner. Keytool puede crear y administrar claves digitales. Jarsigner utiliza esas claves para firmar recursos digitales. Durante el desarrollo, las claves generadas por el propio autor son suficientes para probar el despliegue de Web Start. Sin embargo, con claves generadas por el propio autor, Web Start muestra un cuadro de diálogo que recomienda a los usuarios no confiar en la aplicación, lo cual definitivamente no favorece la construcción de la confianza entre desarrolladores y usuarios. Por esta razón, querrás firmar las versiones públicas con una clave obtenida de una autoridad de firma reconocida, como Thawte o Verisign, lo cual elimina esta advertencia.

Cómo instalar y utilizar Java Web Start para desplegar aplicaciones Java

La aplicación keytool crea claves y las coloca dentro de almacenes de claves, archivos cifrados que contienen claves digitales. Las claves dentro de un almacén de claves están cifradas. Toda esta cifra simétrica significa muchas contraseñas, y eso es algo bueno. Cuando una clave firma un recurso, hace la declaración de que el propietario de esa clave garantiza el contenido de ese recurso firmado. Proteger las claves con una contraseña impide que otros firmen sin el permiso del propietario de la clave.

Cómo generar tu propia clave
Generar tu propia clave auto-generada es tan fácil como usar el primer comando que se encuentra en el listado C. Recuerda las contraseñas que se proporcionan cuando se soliciten, ya que son irretrievables en caso de pérdida. La clave recién generada ahora existe en un almacén de claves en el directorio actual llamado "mykeystore".

La firma de los JAR con una clave digital se realiza utilizando la herramienta jarsigner. La sintaxis del proceso es sencilla, como se puede ver en la segunda línea del listado C. Cada JAR desplegado como parte de una aplicación Web Start debe estar firmado. Si hay más de uno, todos deben ser firmados por la misma clave. En algunas aplicaciones de terceros, los originadores deben firmar los JAR. Si ese es el caso, debes dividirlos en partes y crearlos nuevamente antes de firmarlos. Las firmas múltiples en un JAR impedirán que Web Start los considere verificados.

Después de firmar todos los JAR de la aplicación, solo necesitas hacer un pequeño cambio en el archivo JNLP de la aplicación para solicitar derechos de sistema completos. Este fragmento XML debe colocarse dentro de la etiqueta <jnlp> del archivo JNLP:

<security><all-permissions/></security>

La primera vez que Web Start lanza una aplicación que solicita todos los permisos, solicita al usuario que determine si confía en el firmante de los JAR adjuntos. Mediante este método de creación de claves auto-generadas, la ventana de diálogo mostrará una advertencia que desaconseja otorgar confianza. Las firmas creadas con claves de autoridades de confianza generan una ventana de diálogo con un mensaje menos desalentador. En cualquier caso, si el usuario responde sí, la aplicación se lanzará y tendrá acceso completo al sistema subyacente, como generalmente se espera. Dado que el permiso del usuario se guarda en caché, no volverá a aparecer la consulta de confianza en el futuro.

Cómo utilizar un Iterador de filtrado para optimizar el procesamiento de objetos en Java

Ejecución fuera del sandbox

Los sandboxes están diseñados para garantizar que las aplicaciones no causen estragos en los recursos del sistema, y en la mayoría de los casos, eso es exactamente lo que quieres. Pero en situaciones en las que los usuarios necesitan que una aplicación tenga más acceso, es útil saber cómo sortear las restricciones del sandbox. Los servicios JNLP y la firma de la aplicación ofrecen dos formas de otorgar más libertad a tus aplicaciones.

En Newsmatic nos especializamos en tecnología de vanguardia, contamos con los artículos mas novedosos sobre Desarrollo, allí encontraras muchos artículos similares a Cómo obtener acceso completo al sistema con Java Web Start , tenemos lo ultimo en tecnología 2023.

Artículos Relacionados

Subir

Utilizamos cookies para mejorar su experiencia de navegación, mostrarle anuncios o contenidos personalizados y analizar nuestro tráfico. Al hacer clic en “Aceptar todo” usted da su consentimiento a nuestro uso de las cookies.