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/G­Pastor­Garcia)
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/java­0480.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/deployment­guide/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/2006­October/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.