Firefox y el certificado de la FNMT, una historia de amor-odio

TL;DR El certificado raíz de la FNMT está ya disponible en Firefox, así que los posibles errores de «Conexión no segura» que se producían en muchas webs de organismos oficiales en España ya no saldrán más \o/

Os voy a contar una historia de amor, odio, desencanto, olvido, reconciliación y boda. Es la historia de Firefox y el certificado raíz de la FNMT.

Logo FNMT

Esta historia tiene estos dos protagonistas. Es posible que a Firefox ya lo conozcáis: un navegador de internet rápido, fiable, abierto, transparente y que respeta tu privacidad por encima de todo. Además, altamente personalizable y extendible, por lo que si no te gustaba su pelo moreno, le podías teñir de rubio, y si no te gustaba que hablara de anuncios cada vez que entraras en una web, podías decirle que los bloqueara, enseñándole conocimientos, mediante una extensión.

El otro actor de esta historia de amor es la FNMT, la Fábrica Nacional de Moneda y Timbre que, según la Wikipedia, se dedica a cosas tan importantes como la «fabricación de monedas, billetes, papel moneda, timbres, documentos oficiales y prestador de servicios de certificación.» Casi nada.

Como comprenderéis, a Firefox no le interesa ni las monedas, ni los billetes, ni los timbres ni los documentos oficiales, pero como navegador que es, sí le interesan mucho los servicios de certificación, en especial los digitales.

Certificados digitales

Pero, dirás, ¿qué es eso de «servicios de certificación»? Pues según Microsoft: «es una tecnología de seguridad de identidad y control de acceso que proporciona servicios personalizables para crear y administrar certificados de clave pública utilizados en sistemas de seguridad de software que emplean tecnologías de claves públicas.» En un español que entendamos todos, un proceso para certificar que una web (o correo, o identidad) es quien dice ser, mediante verificaciones.

Y lo importante para este amor entre Firefox y la FNMT viene por esta última parte, ya que los organismos oficiales del gobierno español, utilizan certificados de la FNMT para verificar que son ellos los que te están prestando servicios, y que cuando entren los usuarios en dichas webs, vean que es una autoridad pública española la que dice que son lo que son, y que la transmisión de datos se realiza de forma segura habiendo pasado los requisitos que tiene la FNMT para certificarlas como tal.

Si aún no entiendes bien esto de los certificados, piensa en un ejemplo que vemos en el día a día, como el DNI o el pasaporte. Una autoridad de certificación, la Policía, certifica que tú eres tú a través de una tarjeta de identidad, que tiene unas medidas de seguridad especiales y que sólo se expide mediante una serie de comprobaciones iniciales (por ejemplo la partida de nacimiento) y renovación vía otras comprobaciones (fotografía, comprobación de datos del censo, huellas dactilares…) ¿Os imagináis que cualquier pudiera expedir un DNI? Yo en vez de Guillermo López podría ser Recesvinto Martínez, expedido por mi mismo, pero claro, ¿eso qué validez tendría?

Es por eso que el gobierno utiliza la FNMT: si hace billetes, monedas, timbres y demás cosas oficiales y muy importantes, ¿por qué no hacer también certificados digitales? Nos fiamos de una entidad pública que ha estado funcionando por más de 120 años, y que tiene un control estatal.

Así pues, todos en España hemos aceptado que la Policía es una autoridad de certificación válida para expedir DNI (porque confiamos en la policía y porque hay leyes que dicen que sólo ellos pueden expedirlos), pero… ¿os imagináis qué pasaría si en el extranjero no los aceptan? ¿cómo podríamos tener un documento que certifica nuestra identidad de forma mundial y en el que todos confíen? Aquí tenemos varias opciones:

  1. No hacer nada, viajar con nuestro DNI sólo aceptado en España, y que en cualquier momento nos puedan echar de un país porque igual no somos quien decimos que somos.
  2. Conseguir un documento de identidad para cada país que visitamos, que hemos de tramitar con la autoridad certificadora de cada país (la policía, por ejemplo) para que certifiquen que nosotros somos quienes lo solicitamos.
  3. Que haya un organismo internacional (o un acuerdo entre ellos) que acepten las diferentes autoridades certificadoras, y que si voy a Francia, los gendarmes puedan ver que mi DNI es válido porque está expedido por la Policía española.

Por lógica la mejor opción es la tercera: poder viajar con un DNI (en el caso de Europa / Schengen) o con un pasaporte, porque el resto de los países del mundo saben (mediante acuerdos) que un documento expedido por la policía española es confiable y del que se pueden fiar para comprobar la identidad.

Si volvemos al mundo digital, funciona de una manera parecida, ya que los navegadores (Firefox, Chrome, Explorer), aceptan autoridades certificadoras (la Policía en el mundo real), que tienen certificados raíz, elementos matemáticos que permiten pasar un certificado (DNI en la vida real) y que nos diga… «ok, sí, este certificado (DNI) lo he expedido yo, y es válido».

Si los navegadores tienen dichos certificados raíz, cuando una web nos presenta una identidad que está firmada por ellos, lo verifican en nuestro navegador y dicen: «ey, esto es correcto, adelante».

A partir de ese momento, sabemos que la web es segura y está certificada por una autoridad reconocida internacionalmente, en concreto por los navegadores. Es lo que ahora pasa con la FNMT: Firefox (Mozilla, concretamente) ha aceptado que cumple con sus estándares de seguridad, que tiene una auditoría que está al día y sin fallos, y acepta que dicha entidad expide dichos certificados de una forma correcta y segura, siguiendo un protocolo, para verificar que las webs son correctas. (En el mundo real, el equivalente sería el protocolo que sigue la Policía para darte/renovar tu DNI)

¿Qué hacer con el certificado?

A partir de Firefox 51, ya en la web para todo el mundo, el certificado estará disponible, por lo que ya no verás más problemas con las webs gubernamentales españolas que usen este certificado. Podrás entrar directamente, y puedes comprobar que está verificado por ellos:

Verificación de certificado en Firefox

Verificación de certificado en Firefox

La cronología

  1. Se abre un bug, en concreto el 11 de diciembre de 2007. Se cierra porque es obligatorio que lo inicie alguien de la FNMT, según los requerimientos de Mozilla. Queríamos tenerlo disponible para Firefox 3.
  2. La gente de la comunidad se pone en contacto con la FNMT para pedir, por favor, que abran el bug para pedir la inclusión del certificado.
  3. Finalmente, la FNMT abre el bug el 28 de mayo de 2008 (6 meses después de que se abriera por la comunidad).
  4. La FNMT empieza a ayudar, a través de Cristina.
  5. La FNMT desaparece unos pocos meses después, en diciembre de ese 2008.
  6. 1 año después, la FNMT aparece, en diciembre de 2010.
    1. (con alguien llamado «Rafa», que usa una dirección de GMail, en vez de la oficial, obviemos este hecho…)
    2. Empiezan a hablar sobre cómo incluirlo, y lo que Mozilla necesita
  7. La FNMT con una respuesta burocráticamente lenta, aparece y desaparece, como el Guadiana, durante 2011-2012-2013-2014 (con largos periodos de inactividad)
  8. Mozilla comenta los defectos del certificado y de cómo se usa.
  9. Hay que pasar una nueva auditoría.
  10. Mozilla acepta los requerimientos del certificado y se pasa a discusión pública.
  11. Se arreglan algunos fallos más.
  12. Se decide que es válido.
  13. Está disponible ya, con Firefox 51, lanzado a los usuarios el 24 de enero de 2017.

Entre el punto 1 y el 13, han pasado, exactamente 9 años, 1 meses y 13 días.

BONUS POINT: En Chrome siempre ha funcionado el certificado de la FNMT, y para ilustrar este artículo un poco más, mi idea era decir: «sin embargo, otros navegadores sí confiaban en ellos, por otro tipo de razones. Este es el ejemplo de Chrome.» pero…

Fallo en la web de la administración del Gobierno de España.

Fallo en la web de la administración del Gobierno de España.

…como veis, Chrome y la FNMT se han divorciado, supongo que no por la entrada de Firefox a este círculo amoroso, porque en el caso de los certificados, la poligamia está aceptada y bien vista.

Esto es todo, amigos. Feliz certificación y burocracia pública.

OpenWapp y su historia

OpenWapp es una app para Firefox OS que permite (o permitía) el acceso a Whatsapp a través de dispositivos con el sistema Firefox OS.

Como podréis entender, Firefox OS necesitaba de ciertas aplicaciones para que fuera «mainstream». Estas aplicaciones las pedía todo el mundo: «¿ah, pero que no tiene Whatsapp?», «¿pero que no tiene Instagram?».

De ahí surgió el proyecto OpenWapp. Pero comencemos por el principio.

El principio de todo es la necesidad de que hubiera Whatsapp para Firefox OS, y para eso se necesitaba:

  1. Un servidor intermedio que conectara los terminales con Whatsapp (un proxy, básicamente)
  2. Una librería en el teléfono que conectara directamente con Whatsapp

Los antecedentes

Hubo gente que ya estaba haciendo apps de Firefox OS para conectarse con servicios de mensajería, entre la que destacaba LoquiIM, una app de Adán que presentó en un hackaton que hicimos en Mozilla Hispano y con la que flipé muchísimo. Muchísimo. Ya que tenía una interfaz muy cuidada, el código era muy limpio y tenía la capacidad de acceder a muchos servicios de mensajería, ya fuera ICQ, Facebook Messenger u otras redes Jabber propias o de terceros. Era, simplemente, una pasada. «La app que necesita Firefox OS».

Pero claro, Loqui tenía un grave problema: no tenía acceso a Whatsapp.

Y aquí apareció otra app, Wassap, creada por Luis Iván Cuende:

Su idea era simple usar un servidor intermedio para hacer de proxy con WhatsApp, y tener un protocolo «privado» entre tu teléfono y su servidor, que después creaba una sesión con WhatsApp y enviaba todos los datos.

Lo bueno de esta idea, es que ya había habido gente que había hecho esos servidores, y estaban disponibles en Github, libres para todo el mundo. Había uno en PHP, y otro en Python, llamado Yowsup, el más usado, más actualizado y el más probado.

Así que Luis Iván hizo eso: creó una app para Firefox OS que se comunicaba con Yowsup en uno de sus servidores, que después se comunicaba con Whatsapp para enviar y recibir mensajes (y todo lo necesario para poder realizar esto). También añadió la comunicación entre Yowsup y su app, mediante comunicación WebSockets, una idea magnífica (Whatsapp en general mantiene un socket para el tiempo real, pues para la web, usar websockets era la idea perfecta).

Esto, por supuesto tenía varios problemas:

  1. Si la app se hacía viral, WhatsApp pediría a Mozilla que eliminara la app (como así pasó).
  2. Si la app se hacía viral, todas las conexiones a WhatsApp no vendrían de diferentes teléfonos, si no de un mismo lugar: el servidor de Luis Iván, con una única IP, fácilmente baneable, por lo que todo el mundo acabaría bloqueado.
  3. Los datos de login/registro/conversaciones pasaban a través del servidor de Luis Iván, por lo que podría hacer incluso cosas maliciosas con los datos si hubiera querido.

Así que había que hacer otra cosa, algo un poco locura, pero que no quedaba otra si se quería que Firefox OS tuviera Whatsapp: que el propio teléfono se comunicara con WhatsApp.

La idea: CoSeMe

Como Wassap de Luis Iván, estaba usando un API muy similar a la de Yowsup, pero portada a WebSocket (permitidme esta licencia técnica, pero a alto nivel), lo mejor era hacer un port completo de Yowsup (en python, pensado para ejecutarse en un servidor), a JavaScript, corriendo como una librería en un cliente final (básicamente, una página web).

De aquí nació CoSeMe: «Conocido Servicio de Mensajería» ?

La librería sería un port, en un momento determinado del tiempo de Yowsup a JavaScript, con un API tan similar, que cualquier aplicación usando Yowsup, o un wrapper HTTP o WebSockets, podría usar sin demasiados problemas CoSeMe.

CoSeMe funcionó: registro, login, subir y bajar imágenes, protocolo binario, criptografía in-place (modificar datos, y no copiar, debido a la poca capacidad de cálculo y de memoria de los primeros dispositivos Firefox OS).

Acoplando CoSeMe a Wassap y LoquiIM

Una vez estaba la librería lista, era el momento de que tanto Wassap (por ser la app que ya estaba en el Marketplace y que funcionaba con Whatsapp a través del proxy Yowsup), como LoquiIM (muchos protocolos, pero sin soporte para Whatsapp), hiciera uso de ella.

Tanto Luis Iván como Adán hicieron un trabajo increíble en sus respectivas aplicaciones, llevando Whatsapp a dos aplicaciones diferentes, con sus características respectivas, pero usando un mismo backend: la librería de CoSeMe, y con la idea de que, para triunfar, Firefox OS necesitaba urgentemente WhatsApp y un buen cliente

La app: OpenWapp
openwapp

Una vez que había dos aplicaciones que usaban CoSeMe, podría tener sentido hacer una app propia, sobre todo cuando LoquiIM era multi-protocolo, y Wassap fue retirada del Marketplace, sin más actualizaciones.

OpenWapp fue creado en base a código de una aplicación de mensajería, y modificado para funcionar con Whatsapp: registro, login, contactos, conversaciones uno a uno, grupales… Todo lo que teníamos en Whatsapp hasta hace dos años, así que nada de doble check azul, ni varios administradores en los grupos, ni llamadas de audio, ni grabaciones o audio en las conversaciones, ni compartir documentos, ni cifrado en las conversaciones, ni notificaciones push…

OpenWapp hizo su aparición en el Marketplace el 22 de mayo de 2014, con la versión 1.0.0 y se ha ido actualizando hasta hace un par de meses, con los cambios básicos en el protocolo de WhatsApp para que pudiera seguir funcionando de la forma básica: registro en el sistema, poder hacer «login» (que para un usuario final no se ve), enviar y recibir mensajes, última conexión, actualización de tokens, subida y descarga de imágenes y vídeos…

La muerte

OpenWapp Dead

Hace unos pocos días, y dado que no hay desarrolladores interesados en CoSeMe (porque en el 90% de los casos, el desacople es tan importante entre OpenWapp y CoSeMe, que los cambios que hay que realizar para que OpenWapp siga funcionando es cambiar la librería de CoSeMe), he decidido «darla de baja» del Marketplace.

Básicamente enviar una actualización con un mensaje dando las gracias a la gente que ha usado la aplicación y que ha contribuido para que sea una aplicación con 1.5 millones de descargas durante su vida, 2800 revisiones, y con una valoración de unos 3.8 estrellas sobre 5.

Agradecimientos

Ni CoSeMe, ni OpenWapp ni nada de todo esto hubiera sido posible sin los apoyos que tuvo el proyecto en sus inicios, con código, documentación, diseño, ideas, ayudas varias y tiempo. Como open-source, hay que dar las gracias a Adán de Loqui por sus ganas de seguir con la aplicación, y a los contribuyentes de Loqui, que siguen dando guerra con la aplicación, añadiendo cifrado y otras características. También a Salva de la Puente por el apoyo que ha dado al proyecto con sus increíbles conocimientos técnicos. Y a Giovanny y a Adrián por sus revisiones en el Marketplace.

Y por supuesto, a todos los que han usado OpenWapp, han abierto issues en Github, y han añadido pull-requests para cambiar cosas.

Ha sido un viaje de unos dos años y medio. Intenso, bonito, y con la convicción de que, con más apoyo, WhatsApp en Firefox OS hubiera sido una realidad oficial, y no extraoficial como éramos.

Happy hacking.