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.

Por qué no debes bloquear los anuncios en Internet

Si te interesa este tema, pásate por el foro de Mozilla Hispano, donde estamos debatiendo sobre esto

Hoy, al ver El Mundo, me he encontrado un artículo bastante destacado de su nueva revista, Papel, que habla sobre la publicidad en internet, y que se titula «Por qué no debes bloquear los anuncios en Internet«, escrito por Adrián Mediavilla (@adrimedia)

Y yo voy a deciros lo contrario: «Por qué debes bloquear los anuncios en Internet».

Y lo voy a explicar simplemente con datos. Datos reales. Datos que todo el mundo puede corroborar y ver con sus ojos.

Publicidad y anuncios

Si entramos ahora mismo a la portada de El Mundo, nos encontramos con lo siguiente.

Publicidad en la portada de El MundoDe primeras entro, y no me permite ver nada de su web, y me salta una imagen con publicidad que cubre toda la pantalla. Mal empezamos.

Una vez que carga, ya podemos ver algo de texto. Todo entre publicidad. Enormes anuncios, claro.

Portada el Mundo, "limpia"Así que una vez que veo su gran portada, llena de información, entro a la entrevista que tienen en portada. Veamos qué hay.

Entrevista el Mundo, publiVaya. Más publicidad. Más elementos intrusivos. Esperemos entonces a que se oculte toda esa publicidad para leer realmente lo que queremos.

Entrevista el Mundo - limpia¡Caray! Por fin podemos ver algo de información. Por fin podemos encontrar contenido por lo que esta web es conocida: por tener información.

Tracking de usuario

Pero bueno, no es sólo la publicidad, porque si sólo se mostraran esos molestos banners, podría pasar (o no). Es toda la información que dan a terceras partes al pedir esas imágenes.

Hay una fantástica extensión para Firefox llamada Lightbeam que permite visualizar de una manera increíble todas las conexiones que tienen las páginas con otras, ya sea por imágenes, por estilos CSS o, normalmente, por anuncios y trackeo.

En el caso de El Mundo, vamos a ver qué nos da:

El Mundo, trackingHe visitado un sitio, elmundo.es y ha pedido recursos a 30 sitios de terceros. Esto quiere decir que simplemente visitando elmundo.es, hasta 30 sitios diferentes (que serán de 30 personas o empresas diferentes, en a saber qué partes del mundo) tienen información exacta de mi: que he visitado elmundo.es, a qué hora, con qué navegador, con qué sistema operativo… y un montón de información más que damos sin saberlo.

Si usamos un bloqueador de publicidad, vemos las diferencias de forma clara:

el-mundo-third-party-limpioHemos pasado de dar información de 30 sitios a 5, entre los que se incluye: expansión, marca y elmundo.net, todos del mismo grupo. Tiene sentido, puesto que es posible que elmundo.es contenga información de sus hermanos: económico y deportivo.

Tamaño de la página

Pero bueno, si no te convence demasiado el que no puedas leer la información por los anuncios, o que tus datos se estén enviando a aproximadamente unos 30 sitios diferentes, quizás te interese saber que todo eso extra ocupa mucho, y se tiene que descargar a tu navegador para mostrarse.

Firefox tiene una herramienta para desarrolladores que permite visualizar qué se ha descargado, cuánto ocupa y cuánto ha tardado en descargarse.

En mi caso, bajo una conexión bastante rápida de fibra (300/30), los datos que arroja la web sin bloquear nada son los siguientes:

elmundo-full13.7 MB de datos descargados, en 685 solicitudes totales, tardando la descarga 3,80 segundos.

Ahora comparémoslo con lo que da la página bloqueando publicidad y trackers:

elmundo-light4.6MB, en 324 solicitudes totales, tardando la descarga 1,48 segundos.

Los datos son:

  • 13.7 vs 4.6MB, lo que significa 3 veces más de datos descargados.
  • 685 vs 324, lo que significa que se hacen el doble de peticiones.
  • 3,80 segundos vs 1,48, lo que significa 2,5 veces más lenta la carga de la página.

Datos. Eso son datos.

Conclusiones

No quiero ni siquiera en lo ético o no de tener que aguantar esa publicidad, gigantescos anuncio tan intrusivos, ni en que terceras partes se enteren de lo que hago en internet simplemente por visitar una página de información.

Sólo expongo los datos. Y creo que hablan por sí mismos. Así que yo, mientras no haya publicidad ética, no intrusiva y que respete las preferencias del usuario, seguiré usando bloqueadores de publicidad.

Si te interesa este tema, pásate por el foro de Mozilla Hispano, donde estamos debatiendo sobre esto