Qué es Java Barreras de seguridad Prohibido Agujeros Líneas futuras Consejos Recursos |
Cómo firmar applets para Internet Explorer
Resulta necesario tener instalado el Kit de Desarrollo de Software de Microsoft (Microsoft Software Development Kit, SDK) para Java 3.1. 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. 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 appletsEn 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 (al precio de unas 3000 pesetas al año), mientras que para uso comercial se necesita uno de clase 3 (que cuesta unas 60000 pesetas anuales). Dado que el propósito de este artículo es experimentar con las firmas y no vender ni distribuir software firmado, el lector interesado puede conformarse con 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 Gonzalo del CSIC, se hará lo siguiente: makecert -sk claveGonzalo -n CN=CSIC Gonzalo.cert Este comando crea una pareja de claves, pública y privada, y un fichero de petición de certificado (Gonzalo.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 claveGonzalo. 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 AC 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 Gonzalo.cert Gonzalo.spc Ahora ya se puede utilizar este certificado, Gonzalo.spc, para firmar código, con prestaciones similares a las que poseería si hubiera procedido de una AC. Paso 2: Crear el CABLa 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 utiliza la herramienta cabarc. 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. Supongamos que se dispone de un applet llamado abednego.java, capaz de escapar del recinto de seguridad y leer propiedades del sistema y escribir ficheros. Una vez compilado, se puede crear un fichero armario de la siguiente forma: cabarc n abednego.cab abednego.class Paso 3: Firmar el CABEl 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. El comando para firmar el código es: signcode -spc Gonzalo.spc -k claveGonzalo abednego.cab Para confirmar que todo el proceso se ha realizado correctamente, se puede ejecutar el comando: chkjava abednego.cab o también: chktrust abednego.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. 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] 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 webYa 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="abednego.class"> <param name="cabbase" value="abednego.cab"> </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. 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. Ejemplos de applets para Microsoft Internet ExplorerPuedes ver ejemplos operativos con su código fuente disponible:
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. |