Qué es Java Barreras de seguridad Prohibido Agujeros Líneas futuras Consejos Recursos |
Cómo firmar applets para Netscape
Lo primero que se necesita es hacerse con las herramientas necesarias. En primer lugar, hay que notar que para poder firmar un applet que va a acceder a recursos restringidos, como el sistema de ficheros, propiedades del sistema o conexiones de red, se necesita alterar el código fuente del applet, incluyendo llamadas a ciertas funciones para garantizar los privilegios requeridos. Estas clases constituyen lo que se denomina el Netscape Java Capabilities API. Por otro lado, se requiere la herramienta de firmado, conocida como SignTool 1.1. Una vez armados con este arsenal, se puede proceder ya a firmar applets, siguiendo los siguientes pasos. Paso 1: Crear un certificado para firmar appletsEl primer paso consiste también en adquirir un certificado adecuado de una autoridad de certificación. Hay que asegurarse de que la autoridad elegida emite certificados que permitan firmar software, los de clase 2 para uso personal y los de clase 3 para aplicaciones comerciales. VeriSign puede ser de nuevo la elección adecuada. Se pueden consultar más autoridades propuestas por Netscape, aptas para certificar sus productos. En este caso, y como sólo se necesita para hacer pruebas, se creará un certificado de prueba, que es gratis, utilizando la citada herramienta SignTool 1.1. Antes de instalar claves y certificados nuevos en las bases de datos de Netscape Communicator, es imprescindible crear una contraseña para acceder a la base de datos. Para hacerlo, se pulsa el botón de Seguridad en la barra de herramientas de Communicator, se elige Passwords y después se pulsa el botón de Establecer Passwords para crearlo. Otro aviso importante es que para ejecutar SignTool se debe cerrar antes todas las ventanas abiertas de Communicator, ya que en caso contrario se corre el riesgo de corromper las bases de datos de claves y certificados. Para generar un certificado de prueba se utiliza la opción -G seguida de un nombre y la opción -d para indicar el directorio donde se encuentra la base de datos de certificados (el fichero cert7.db) y claves (el fichero key3.db) de Communicator. Por ejemplo, para crear un certificado para Gonzalo del CSIC, se puede escribir lo siguiente (en negrita aparece lo que se debe introducir en la línea de comandos): signtool -G gonzalo -d c:\netscape\users\gonzalo Si en el paso anterior se especificó la opción -d junto con el camino donde se encuentra la base de datos de claves y de certificados de Communicator, la base ya ha quedado automáticamente actualizada. La próxima vez que se arranque Communicator, si se pulsa el botón de Seguridad de la barra de herramientas, en Certificados y a continuación en Propios se comprobará que aparece el recién creado. Se puede comprobar que el certificado se ha instalado correctamente también mediante signtool, con la opción -l: signtool -l Con este certificado ya se está listo para firmar applets. Ahora bien, no basta con firmarlos. Para que los usuarios puedan ejecutar applets firmados es necesario que instalen en su versión de Communicator el certificado que se acaba de generar. Si se hace un listado del directorio donde se está trabajando, se observará que signtool ha creado dos ficheros automáticamente, x509.cacert y x509.raw. El primero de ellos contiene el certificado en formato base64. Para que quede a disposición de cualquiera que lo necesite, se seguirán los siguientes pasos:
Paso 2: Crear un applet con privilegiosAntes de traspasar los límites del recinto de seguridad, los applets tienen que pedir permiso educadamente. La manera como se consigue es mediante el API de capacidades. Cada vez que un applet quiere efectuar alguna acción restringida, debe pedir permiso al navegador para ver si éste se lo concede, para lo cual se sirve de las funciones contenidas en esta API. Cuando el applet le pide permiso al navegador, éste busca en su base de datos si existe una entrada para el firmante del applet y si la acción le está permitida. Caso de no existir ninguna entrada, el navegador presenta una ventana pidiendo confirmación antes de conceder el permiso. El usuario decide si garantiza o deniega el permiso, con la posibilidad de almacenar la decisión en la base de datos para futuras referencias. La forma de modificar el applet consiste en preceder todas las llamadas a recursos protegidos de una llamada al gestor de privilegios. Por ejemplo, para solicitar privilegios antes de leer propiedades del sistema, la función en Java que lee los privilegios irá precedida de: PrivilegedManager.enablePrivilege("UniversalPropertyRead"); Para leer/crear/escribir ficheros, se precedería el bloque de funciones correspondiente por: PrivilegedManager.enablePrivilege("UniversalFileAccess"); Y así con distintas llamadas para cada tipo de recurso. Una vez terminadas las operaciones que requieren privilegios, constituye una buena práctica revocar los privilegios concedidos, utilizando la siguiente función: PrivilegeManager.revertPrivilege("UniversalPropertyRead"); Puedes consultar el listado completo de los recursos que se pueden acceder. La documentación completa sobre este API donde se detalla su funcionamiento se puede obtener gratuitamente. El mayor inconveniente de este enfoque es que exige la modificación del applet y además, como consecuencia de los cambios introducidos, no funcionará ya en ningún otro navegador, tirando por tierra la filosofía de Java de "Escribir una vez, ejecutar en cualquier sitio". Paso 3: Firmar y empaquetar los ficheros con las clasesEn vez de firmar el fichero con todas las clases compactadas, como se hacía en el caso de IE, primero se crea un directorio al que se copian todas las clases que componen el applet y a continuación se firma el directorio utilizando la herramienta SignTool. La propia herramienta se encarga de generar un fichero comprimido con todas las clases y demás ficheros que se hayan copiado en el directorio. Este fichero recibe el nombre de Archivo Java (JAR). En versiones anteriores esta herramienta se llamaba zigbert, pero con la versión actual de SignTool ha quedado obsoleta. En el caso supuesto de que se quiera firmar la clase abednego.class, se copiará a un directorio al que se llamará abednego y se ejecutará el programa SignTool, pasándole la clave del certificado almacenada en la base de datos de Communicator, que se acaba de generar en el paso 1. Por ejemplo: signtool -k gonzalo -Z abednego.jar abednego Aquí pide el password: Enter Password or Pin for "Communicator Certificate DB": [no se produce eco] Si se ha introducido correctamente, continúa: adding abednego/META-INF/manifest.mf to abednego.jar...(deflated 14%) Ahora ya está disponible el fichero abednego.jar para distribuirlo con su firma incorporada. Se puede verificar que el proceso se ha realizado correctamente utilizando la opción -v: signtool -v abednego.jar status path Paso 4: Incrustar el JAR en la página webEn este caso la etiqueta <applet> también cambia ligeramente para permitir la inserción del archivo JAR: <applet Es importante eliminar el fichero abednego.class original del directorio, ya que en caso contrario el navegador lo cargaría, en lugar del firmado. Ahora ya se puede visualizar correctamente el applet en Communicator. En cada ocasión en la que el applet necesite acceder a un recurso protegido, al usuario se le presentará una ventana de advertencia, en la que se le informa de los permisos que está solicitando ese applet, acompañados de una estimación del riesgo potencial derivado de su concesión. Siempre y cuando no se active la casilla para recordar la decisión, esta ventana aparecerá cada vez que el applet intente acceder de nuevo a ese recurso. En la figura se muestra la información del certificado que el usuario puede comprobar pulsando el botón Certificado en la ventana anterior. Obsérvese cómo los datos corresponden a los que se introdujeron en el paso 1. Ejemplos de applets para Netscape CommunicatorPuedes ver un ejemplo operativo con su código fuente disponible en:
Copyright © 1997-1999 Gonzalo Álvarez Marañón, CSIC. Todos los derechos reservados. Criptonomicón es un servicio ofrecido libremente desde el Instituto de Física Aplicada del CSIC. Para información sobre privacidad, por favor consulte la declaración de política sobre privacidad. Para sugerencias, comentarios o quejas, acuda al libro de visitas. Para contribuir al Criptonomicón, lea la página de contribuciones. |