Download Firma digital en el navegador CAPICOM en Explorer y
Document related concepts
no text concepts found
Transcript
Firma digital en el navegador De Servipedia Tabla de contenidos 1 CAPICOM en Explorer y crytpo.signText en Firefox 2 Implementación de componente XPCOM para firefox y ActiveX para MSIE 3 Applet Java de firma digital 3.1 Acceso a los recursos del sistema local y seguridad 3.2 Interacción del applet con los stores de certificados y llaves 3.2.1 MSCAPI 3.2.2 Mozilla 3.2.3 Clauer 3.3 Bibliotecas de creación y verificación de firma que soportan XAdES para java 4 Enlaces de interés CAPICOM en Explorer y crytpo.signText en Firefox Mediante el uso de estas funcionalidades podríamos implementar el procedimiento de firma digital en el navegador, pero estas funciones son demasiado lentas frente a la firma de datos de un tamaño mayor que 5MB, además mediante estos procedimientos solo podríamos generar la firma en pkcs7, quizas capicom es más flexible en este punto, pero no en formato XML Dsig ni obviamente XAdES. Por esto, ésta opción podría quedar descartada. Implementación de componente XPCOM para firefox y ActiveX para MSIE Cabe la posibilidad de implementar estos dos componentes, de esta forma, ambos exportarían unas funciones accesibles desde javascript que se podrían utilizar desde los clientes de forma que se firmaran los datos especificados como parámetros a las funciones. La desventaja principal de esto es que debemos realizar un desarrollo doble, por un lado el componente XPCOM para firefox y por el otro el ActiveX para MSIE, además de buscar una biblioteca en C/C++ que nos permita obtener la firma representada en formato XAdES. Estos componentes deberían instalarse previamente, aunque esto se podría hacer de forma transparente vía web. En el caso de firefox, tendríamos una dificultad añadida, que es el hecho de cuando instanciamos un componente creado por nosotros de forma que obtenemos su interfaz y este nos permite utilizar sus métodos, debemos hacerlo desde un javascript firmado y empaquetado en un jar, además, la página web que utiliza esa funcionalidad debe estar también firmada, lo cual hace impracticable esta opción. Esta opción es bastante costosa además y ofrece poca transparencia de cara al usuario final. Applet Java de firma digital Realizar la implementación de un applet de realización de firma digital parece la opción más recomendable, ya que el �nico requisito para que este se ejecute es tener la máquina virtual instalada. Todas las consideraciones que tomaremos en este documento están basadas en la versión del jre 1.5 de Sun, algunas, como el uso de pkcs11, pueden no ser válidas para versiones anteriores. Acceso a los recursos del sistema local y seguridad Para que un applet tenga acceso a los recursos del sistema debe estar firmado, antes de lanzar el applet, la máquina virtual comprobará si en el store local del usuario: %HOME%/%APPDATA%/Sun/Java/Deployment/security/trusted.certs (En Windows) $HOME/.java/deployment/security/trusted.certs (En Linux) En estos stores se encuentran los certificados raíz sobre los cuales el usuario ha depositado su confianza, también en la misma ruta, el fichero trusted.jssecerts contiene los certificados raíz para los sitios webs en los que se alojan los applets. Al realizar esta comprobación, pueden suceder dos cosas: 1. Que el usuario confie en la CA y por tanto se le muestre que la verificación es válida y se pregunte por depositar su confianza en la organización que ha firmado el applet. 2. Que el usuario NO confie en la CA y por tanto se le muestre que la verificación NO es válida y se pregunte por depositar su confianza en la organización que ha firmado el applet sin poder verificar el certificado. Una vez el usuario ha depositado su confianza, el applet posee acceso al sistema �nicamente limitado por los permisos del usuario que ejecuta el navegador pudíendose comportar como una aplicación local. Interacción del applet con los stores de certificados y llaves MSCAPI No existe una forma "nativa" para acceder a los certificados de usuario almacenados en el store "MY" de Windows hasta la verisón 1.6 de la máquina virtual de java, por tanto, para proporcionar este acceso, haremos uso de la dll implementada por el proyecto OpenOCES que utiliza la tecnología JNI para ser accedida desde Java. Mozilla En Mozilla el acceso a certificados y llaves se puede hacer a partir de su módulo pkcs11 interno, éste viene implementado por la biblioteca de enlace dinámico libsoftkn3 o softkn3 cuyas dependencias son libplc4, libplds4 y libnspr4 (estas bibliotecas pueden aparecer sin el prefijo lib en windows). La instanciación del módulo se realiza mediante el proveedor de Sun SunPKCS11 y se deben pasar los siguientes parámetros al módulo de seguridad mediante el fichero de configuración que utiliza SunPKCS11 al instanciarse. name = NSS library = C:\\Archivos de programa\\Mozilla Firefox\\softokn3.dll slot=2 nssArgs="configdir='/Documents and Settings/user/Datos de programa/Mozilla/Firefox/Profiles/52sp46c1.default/'\ certPrefix= keyPrefix= secmod='secmod.db' flags=readOnly" Donde library apunta al módulo pkcs11 y nssArgs definen los argumentos necesarios para la inicialización del módulo, como el directorio del perfil del usuario del cual queremos obtener los certificados. Por tanto, debemos averiguar desde el applet dos rutas, la primera, la ruta de instalación de firefox y la segunda la ruta hasta el perfil que se encuentra en ejecución. Obtención de las rutas en Windows: Perfil actual: Los perfiles se encuentran en la ruta APPDATA/Mozilla /Firefox/profiles/ en forma de directorios, dentro de éstos, el perfil que esta siendo utilizado tiene un archivo de bloqueo denominado ".parentlock". La varialble APPDATA la podemos obtener del registro de windows en: "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders" clave: App Path de instalación: Para obtener el path de instalación debemos conocer qué navegador se esta ejecutando, ya que puede ser cualquiera de la familia mozilla (SeaMonkey, firefox, etc.) el que el usuario esté gastando y la ruta de instalación cambia con el nombre, para ello sería conveniente que se proporcionase un parámetro al applet con los datos obtenidos de la función javascript navigator.userAgent y que el applet obtubiese de ahí el nombre del ejecutable. Una vez obtenido, en el registro de windows, en la clave: HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\Apps Paths\"NOMBRE DEL EJECUTABLE" clave con valor: PA tenemos su path de instalación. Obtención de las rutas en Linux: Perfil actual: En el caso de Linux, en el "user.home" del usuario tenemos la ruta .mozilla/firefox/ que contiene los directorios con los perfiles de usuario, el perfil en uso posee en el directorio el archivo .parentlock Path de instalación: La obtencion del path de instalación puede hacerse buscando el ejecutable firefox en el $PATH del usuario. Clauer Para interactuar con los certificados del clauer podemos utilizar también el proveedor SunPKCS11 de Sun, utilizando nuestro módulo pkcs11. Este módulo debe estar previamente instalado en el sistema y para encontrar su ubicación tenemos al menos dos posibilidades: Buscar en los directorios comunes de instalación. (Poco recomendable, ya que el usuario puede haberlo modificado) Requerir que el módulo este instalado en el firefox y parsear el fichero secmod.db para obtener su ubicación, de esta forma al acceder al applet desde el navegador firefox, sólo se listarían los certificados almacenados en el clauer si el módulo estuviera instalado en el navegador.(Esta opción es bastante transparente para el usuario). Bibliotecas de creación y verificación de firma que soportan XAdES para java Dcontract (http://www.frankcornelis.be/dcontract/index.html) IAIK (http://jce.iaik.tugraz.at/sic/products/xml_security/xades) JDigiDoc (http://openxades.org/) Transparencias sobre Opencities (http://objectwebcon06.objectweb.org/xwiki /bin/download/Main/DetailedSession/GPastorGarcia) SDK de SIA (http://www.sia.es/prensa/resulcertifirma.htm) Baltimore (¿Parece que no exista su web?) Enlaces de interés OpenOCES (http://www.openoces.org/) Obteniendo claves de registro en Windows desde java. (http://www.rgagnon.com /javadetails/java0480.html) Apis nativas de seguridad para JDK 6. (http://java.sun.com/developer /technicalArticles/J2SE/security/) Interacción con los keystores de los navegadores. (http://java.sun.com/j2se/1.5.0 /docs/guide/deployment/deploymentguide/keystores.html) Interacción Java/pkcs11 (http://java.sun.com/j2se/1.5.0/docs/guide/security /p11guide.html) Mail preguntando sobre la actividad de OpenXades. (http://www.openxades.org /pipermail/openxades/2006October/000075.html) Obtenido de "http://haddock.si.uji.es/wiki/Firma_digital_en_el_navegador" Esta página fue modificada por �ltima vez el 09:50, 24 oct 2006.