TIL: network.websocket.allowInsecureFromHTTPS en Waterfox para desarrollo local con Phoenix

· Iván Hernández Cazorla - Blog

Waterfox bloquea conexiones WebSocket inseguras por defecto, lo que afecta al desarrollo local con Phoenix.


English version available


Hacía tiempo que no tenía una sesión de programación intensa con Elixir y Phoenix. Y no recuerdo haber tenido ninguna tras mi último cambio de navegador (migré de LibreWolf a Waterfox, ambos basados en Firefox). Estaba trabajando con Phoenix Channels y, por tanto, con websockets, pero estaba ocurriendo un problema que, por más que lo depurase, continuaba.

El problema #

El problema que observé inicialmente fue una serie de fallos que provocaban, aleatoriamente, que la conexión websockets terminase con un timeout. Alguno de esos errores, en la consola del navegador, fueron:

Empecé a revisar y revisar, a intentar entender por qué ocurría eso, si realmente no había hecho nada fuera de lo común con respecto a los Channels. Pero bueno, tras tanto tiempo sin tocarlos, a uno siempre se le puede ir alguna pequeña pieza.

Pero resultó ser que el problema iba por otro lado, porque revisando los logs en iex me di cuenta de dos puntos importantes:

  1. Ningún cliente se estaba conectando por medio de websockets.
  2. Siempre que tiraba y conectaba uno, se conectaba usando :longpoll.

¿Por qué?

La causa #

Tras mucho indagar en por qué se conectaban usando :longpoll, decidí probar con Chromium (pensándolo ahora, debí haberlo hecho antes). ¡Y voilà! ¡Funcionaba a la perfección todo! Abro la consola del navegador y ni un solo problema. ¿Qué había pasado?

Todo este desarrollo era en local, lo más tradicional del mundo: http://localhost:xxxx. Sin seguridad, porque no la necesito ahora mismo.

Pues respondiendo a la pregunta anterior: los navegadores basados en Firefox tienen una clave de configuración denominada network.websocket.allowInsecureFromHTTPS, que por supuesto, como debe ser, está desactivada por defecto.

He de admitir que esto también me genera algunas dudas:

  1. network.websocket.allowInsecureFromHTTPS no está documentada en ningún lugar y estaría bien documentar este tipo de claves de configuración.
  2. Como no hay documentación, debo inferir lo que pueda de la clave en sí: ¿permite conexiones WebSocket inseguras... desde HTTPS?
  3. Pero si lo activo, se arregla el problema, la cuestión es que en localhost no estoy usando HTTPS, sino HTTP.
  4. Por lo que, como conclusión, entiendo que al activar esa clave se permite cualquier conexión ws:// desde HTTP o HTTPS.

La solución #

La solución, para este caso en concreto, activar network.websocket.allowInsecureFromHTTPS en Waterfox. Destaco: solución temporal.

La solución, a largo plazo, evitar tener que activar esa configuración. Pero eso es asunto para otra entrada, si acaso.

Pero, ¿por qué Chromium si me permitió esa conexión insegura? Puede ser que, por motivos de programar con Flutter para algún proyecto web haya configurado Chromium para iniciarse siempre con --allow-running-insecure-content. Cosa que si es así, tendré que revisarlo, porque si incluso desde la terminal se ejecutase con ese flag, no me hace mucha gracia tenerlo tan fácil de usar. Me lo apunto como tema a investigar.

Nota: también es posible que se me esté escapando algún aspecto de la configuración de Phoenix y Channels, si alguien que lea esto lo cree así, ¡que no dude en comentármelo! Se lo agradeceré inmensamente.

last updated:

Todas las entradas están bajo licencia CC BY-SA 4.0. Las imágenes y recursos de terceros tienen su licencia especificada.

All posts are licensed under CC BY-SA 4.0. Third-party images and resources have their licenses specified.

Si te resulta útil lo que escribo, puedes invitarme a un café.

If you find my writing useful, you can buy me a coffee.