24 enero, 2006

Utilizar tarjeta criptográfica en GNU/Linux

En mi anterior post veíamos cómo Instalar driver Omnikey CardMan 2020 usb. En éste vamos a darle utilidad a éste lector de tarjetas.

Esta parte me costó más de conseguir, y no fue por ganas. Fue por el software privativo. Me explico. La tarjeta que expide la ACCV utiliza el estándar PKCS#11 (hasta ahí bien). Pero accede a ése estándar a través de un API propietario (Siemens CardOS API). Cuando adquieres el lector, éste viene con un cd donde se encuentra este API (intentad buscarlo por internet, es complicadísimo encontrar un enlace de descarga), aunque solamente está para Window$.

Por suerte, en mi trabajo tenemos (aunque yo no lo sabía) contacto con gente de Siemens, que están bastante dispuestos a ayudar. Pues bien, perfecto, Siemens tiene un driver de la tarjeta para Linux, pero con un pequeño problema. No se puede distribuir, salvo que tengas una licencia del CardOS API (en el cd que viene con la tarjeta tienes una licencia, ¡Yuju!).

Una vez conseguido el API para Linux la instalación es muy sencilla:

  • Se copia el archivo .tgz en la raiz del sistema (/)
  • Se descomprime el archivo: tar xvzf archivo.tgz
Y a funcionar...

Con esto ya podemos utilizar la tarjeta criptográfica en Linux. Los pasos para utilizar cualquier tarjeta criptográfica (soportada en Linux) serían prácticamente los mismos. Si tenéis suerte vuestra tarjeta puede estar soportada por el proyecto OpenSC (aunque parece que tiene problemas con su dominio...). Soporta muchos tipos de tarjetas y trata de ser un API estándar para acceder a tarjetas criptográficas.

Preparar las aplicaciones

Ahora detallaré los pasos a seguir para utilizar la tarjeta criptográfica con los programas que más utilizamos (en mi caso Firefox, Evolution).

En primer lugar vamos a hacer un pequeño hack (si es correcto llamarlo así). Estas aplicaciones que he comentado tienen un punto en común a la hora de utilizar los certificados de la tarjeta; utilizan la librería NSS (Network Security Services) de Mozilla. Esto es importante porque en un principio ni Evolution, ni OpenOffice.org tienen un mecanismo para cargar certificados desde un lector de tarjetas. Así vamos a realizar los pasos siguientes:

  • Creamos un directorio en nuestro home:
    # mkdir .certs-db
    
  • Copiamos en esa carpeta los siguientes archivos del directorio de Firefox: cert8.db, key3.db, secmod.db
    # cp .mozilla/firefox/.default/cert8.db .certs-db
    # cp .mozilla/firefox/.default/key3.db .certs-db
    # cp .mozilla/firefox/.default/secmod.db .certs-db
    
  • Creamos enlaces simbólicos en Firefox y en Evolution:
    # ln -sf /home//.certs-db/cert8.db /home//.evolution/cert8.db
    # ln -sf /home//.certs-db/key3.db /home//.evolution/key3.db
    # ln -sf /home//.certs-db/secmod.db /home//.evolution/secmod.db
    # ln -sf /home//.certs-db/cert8.db /home//.mozilla/firefox/.default/cert8.db
    # ln -sf /home//.certs-db/key3.db /home//.mozilla/firefox/.default/key3.db
    # ln -sf /home//.certs-db/cert8.db \ 
    /home//.mozilla/firefox/.default/secmod.db
    

Así, los certificados que añadamos a Firefox nos servirán para Evolution. Igual que con las tarjetas criptográficas. Los módulos de tarjetas que añadamos a Firefox los podremos utilizar en Evolution.

Instalar el módulo de la tarjeta en Mozilla Firefox

Para instalar el módulo de la tarjeta en Firefox seguiremos los siguientes pasos:

  • Arrancamos Firefox.
  • Elegimos: Editar->Preferencias
  • Seleccinamos: Avanzadas
  • Desplegamos: Certificados
  • Presionamos sobre Administrar dispositivos de seguridad...
  • Elegimos Cargar, le damos un nombre descriptivo (en mi caso Siemens CardOS API) y elegimos el módulo que queremos cargar. Si utilizásemos OpenSC, por ejemplo, elegiríamos /usr/lib/pkcs11/opensc-pkcs11.so.
  • Aceptamos y ya está. Si accedemos a Administrar certificados nos pedirá la clave de nuestra tarjeta.

Ahora, si ejecutamos Evolution y mostramos los certificados, igualmente, nos pedirá el pin de nuestra tarjeta y podremos utilizarla con éste programa.

12 comentarios:

Ibon dijo...

Hola:

Interesante el "hack". ;)

Únicamente una cosa, ¿por qué los enlaces simbolicos en el directorio de firefox, si es el que tiene los ficheros?.

Por otra parte he probado en Evolution: "Editar --> Preferencias --> Certificados --> Importar", "/usr/lib/opensc/opensc-pkcs11.so" y me pide la contraseña para "NSS lalala", o sea el sistema Mozilla, y luego la contraseña un "dispositivo" PKCS12. Aún no he conseguido nada en claro con esto.

Vradick dijo...

Los enlaces simbólicos en el directorio de firefox son, en un principio, por comodidad: Es más fácil buscar en ~/.certs-db. Además, así son más independientes (en todos los sentidos) de firefox, que es lo que busco.

¿Un dispositivo PKCS12? PKCS12 es el estándar de intercambio de claves privadas en fichero. Así que si te pide esa contraseña debería ser porque has importado un fichero en ese formato.

Félix dijo...

Buenas vradick.

Una pregunta ¿donde se explicita que el driver de Siemens no se pueda distribuir?

Vradick dijo...

En mi versión de los drivers hay un fichero, de nombre "License_Agreement_Card_API.txt", que contiene la licencia de uso y que en su punto 4 expone:
"4. The licensee shall take the necessary care and precautions for an indefinite period of time that the programs and program documentation, included duplicates, do not become known to third parties without the prior written consent of Siemens, even in edited, expanded or altered versions. In case of legal distribution of this software to third parties the licensee will put the third party under the obligation of this end-user-software-license-agreement.
The licensee will duplicate or alter programs only with the prior written consent of Siemens."

Por tanto no lo puedo publicar alegremente, ni yo, ni nadie que reciba este software. De hecho no se puede siquiera copiar y entregar de manera privada (si nos atenemos 100% a la licencia).

Un saludo.

aktor dijo...

Muchas gracias. Me ha sido de gran ayuda. Lo que no consigo es poder firmar un correo, ya que al configurar la cuenta con Evolution:

Editar -> Preferencias -> Cuentas de Correo -> Editar -> Seguridad

No me permite indicar el certificado a través de pkcs11.

Quizás es que lo estoy haciendo mal y no es ahí donde hay que indicarlo.

¿Sabrías cuál es la manera de firmar un correo?

Muchisimas gracias!

Vradick dijo...

Si no has utilizado el hack de los enlaces simbólicos tienes que añadir el dispositivo en firefox, siguiendo los pasos que se indican.
Después copia los archivos cert8.db, key3.db y secmod.db del directorio de firefox ($HOME/.mozilla/firefox/nombre_del_perfil/) en el directorio de evolution ($HOME/.evolution/).
Evolution no permite añadir dispositivos de seguridad, por lo que se debe hacer desde Firefox como he comentado. La opción importar del menú de certificados es para importar certificados pkcs12.

aktor dijo...

Creo que me he explicado fatal. He añadido el modulo pkcs11 en firefox y realizado los enlaces, como comentas. Hasta ahí todo bien. Cuando abro evolution me pide el PIN, lo cual es señal de que efectivamente está haciendo uso del módulo pkcs11 de firefox.

Sin embargo, no puedo asociar ese certificado a una cuenta de correo. Entiendo que en

Editar -> Preferencias -> Cuentas de Correo -> Editar -> Seguridad

Debería aparecer el certificado para poder asociarlo a mi cuenta (al igual que hay que hacer en thunderbird).

Aunque no estoy seguro, creo que el problema puede ser que la tarjeta con la que estoy intentando hacerlo no tiene un atributo de correo. Tengo el presentimiento que evolution requiere un certificado con un atributo de correo para poder relacionar la cuenta de correo con el certificado.

¿has podido verificar este punto?

Si avanzo un poco más, te lo haré saber.

Gracias por el feedback!

Vradick dijo...

Efectivamente, en Evolution solamente puedes asociar un certificado emitido para la cuenta de correo que estás editando.

Por ejemplo, el DNIe no se puede utilizar para firmar correos, ya que no tiene cuenta de correo asociada.

Pero eso debería ser así en todos los clientes de correo (no lo he probado con Thunderbird), ya que no se podría autenticar al emisor del mensaje. Sí se podría saber quién ha firmado el contenido, pero no quién lo ha enviado.

aktor dijo...

Efectivamente, era eso :-) Aunque si puedes asignar firmas a cuentas de correo que no coinciden con la dirección de correo indicada en el certificado.

En Mail de Mac OS X, por ejemplo, no lo permite. Ambas direcciones tienen que coincidir exactamente (case sensitive)

Anónimo dijo...

Hola Vradick, ¿cómo puedo conseguir una actualización para "HiPath SIcurity Card API"? Resulta que tengo una tarjeta de esas que "regaló" la Junta de Andalucía con el lector Omnikey y el CD de instalación y ahora no me va bien el el nuevo ordenador.
Saludos y gracias.

Vradick dijo...

En la página web de ACCV se puede descargar una imagen ISO con los drivers que se utilizan para sus tarjetas (Siemens o G&D).

Para la tarjeta Siemens se puede utilizar el siguiente enlace: http://www.accv.es/cd/CD-Siemens.rar

Es la última versión que conozco.

Anónimo dijo...

Cuando intento cargar el módulo libsiecap11.so en el Firefox tras haber seguido todos los pasos que indicas obtengo el mensaje de que no es posible añadir el módulo.
No sé qué ocurre