Ir al contenido

Dirección segura (https)

Cada equipo Forálic tiene una dirección propia, del tipo https://t4w8mz.box.foralic.com (la etiqueta, t4w8mz en este ejemplo, cambia en cada equipo), que abre Forálic con candado en cualquier ordenador, tablet o móvil de la red de la farmacia, sin instalar ni configurar nada en el aparato. Aunque el nombre acabe en foralic.com, la conexión va del aparato al equipo por la red local: no pasa por internet ni por ningún servidor de Forálic.

La dirección del equipo está en Ajustes → «🏥 Farmacia» → «Dirección segura (https) en los PC» → «🔒 Guía de dirección segura». Conviene guardarla como favorito en cada puesto.

  • La wifi. Sin cifrar, cualquier aparato conectado a la misma red puede leer lo que viaja por ella: la contraseña del equipo o la de gestor al entrar, la cookie de sesión que deja recordado el aparato (con ella se entra sin contraseña) y todo lo que enseña la pantalla.
  • Funciones del navegador. Algunas solo existen en páginas https («contexto seguro»), como copiar con un botón o instalar Forálic como aplicación sin el aviso de «sitio no seguro». La conexión bancaria necesita una dirección https a la que vuelva el banco, y el enlace para restablecer la contraseña de gestor lleva a la dirección segura.
  • Lo que hace el equipo con https. La cookie de sesión lleva el atributo Secure, así que el navegador no la manda por http. En las instalaciones que exigen https, el equipo no acepta contraseñas que lleguen sin cifrar.
Internet Red local de la farmacia 1 2 DNS de Cloudflare registro sin proxy Navegador PC, tablet o móvil Equipo Forálic nginx, puerto 443 1 Consulta DNS del nombre t4w8mz.box.foralic.com se guarda hasta un día 2 CNAME t4w8mz.foralic.org A 192.168.1.20 · TTL 24 h 3 TLS 1.2/1.3 del navegador a nginx,certificado de Let's Encrypt;por la red local, sin intermediarios.
  1. El nombre. La etiqueta son seis caracteres al azar, no el nombre de la farmacia: todo certificado que se emite se publica en los registros públicos de Certificate Transparency, y con nombres de farmacia esos registros serían la lista de clientes.
  2. El DNS. t4w8mz.box.foralic.com es un CNAME a t4w8mz.foralic.org, que tiene un registro A con la IP privada del equipo en la red de la farmacia (de los rangos 10.x, 172.16.x–172.31.x o 192.168.x) y un TTL de 86.400 s, 24 horas. El registro va sin el proxy de Cloudflare: la respuesta es la IP tal cual, y ningún servidor se pone en medio de la conexión (con una IP privada, tampoco podría).
  3. La conexión. El navegador se conecta a esa IP, por la red local, al puerto 443. El TLS (1.2 o 1.3) lo termina nginx, dentro del equipo, con un certificado de Let’s Encrypt para ese nombre. La clave privada del certificado se genera en el equipo y no sale de él.

Lo único que sale a internet es la consulta DNS del nombre: del aparato a su resolutor (el router o el DNS del operador) y de ahí a los servidores DNS de Cloudflare. Con un TTL de 24 horas, aparatos y resolutores guardan la respuesta hasta un día, así que la consulta sale pocas veces. Nada de la sesión pasa por ahí.

Los aparatos con Tailscale, como los del soporte de Forálic, usan además la dirección de la tailnet (….ts.net), que el mismo nginx sirve con su propio certificado.

Internet Red de la farmacia DNS de Cloudflare foralic.com: CNAME foralic.org: TXT y A Let's Encrypt emite el certificado Servicio Forálic escribe el TXT y el A Equipo Forálic agente foralic-tls con lego, cada 15 min por Tailscale 1 2 6 3 4 5
Ninguna conexión entra en la farmacia: todas las flechas que cruzan la frontera las abre el equipo o son respuestas.
  1. El agente foralic-tls del equipo, que se ejecuta cada 15 minutos, pide el certificado a Let’s Encrypt con lego, o lo renueva cuando faltan 21 días para que caduque.
  2. Let’s Encrypt pide una prueba de que se controla el nombre: un registro TXT en _acme-challenge.t4w8mz.box.foralic.com (el reto DNS-01).
  3. El equipo pide a un servicio de Forálic, por el canal privado de mantenimiento (Tailscale), que publique ese TXT. El servicio reconoce al equipo por su dirección en ese canal y solo le deja tocar sus dos registros: el TXT del reto y el A, que solo admite una IP privada.
  4. El servicio escribe el TXT en _acme-challenge.t4w8mz.foralic.org.
  5. _acme-challenge.t4w8mz.box.foralic.com es un CNAME fijo a ese nombre: Let’s Encrypt lo sigue y lee el TXT.
  6. Let’s Encrypt emite el certificado para t4w8mz.box.foralic.com. foralic.org no aparece en él.

De ahí salen tres cosas:

  • Let’s Encrypt nunca se conecta al equipo, y no hay que abrir ningún puerto del router. El otro reto habitual, HTTP-01, exigiría que el equipo contestara desde internet en el puerto 80.
  • El equipo no guarda ninguna credencial del DNS.
  • Si cambia la IP del equipo en la red, el agente corrige el registro A en menos de 15 minutos, pero los aparatos pueden recordar la antigua hasta 24 horas. Por eso, desde la instalación, la IP del equipo queda fija.
  • Por http:// y la IP del equipo, Forálic sigue respondiendo: una IP no puede tener certificado. Prueba entonces las direcciones seguras del equipo (la del nombre propio y, si el aparato tiene Tailscale, la de la tailnet) y salta a la primera que responde, en la misma pantalla. La sesión no viaja: en la dirección segura se entra una vez y queda recordado.
  • Si ninguna responde, sale abajo la franja «Este aparato entra sin cifrar», que se cierra con «Entendido». Si la instalación exige https, en su lugar sale la pantalla «🔒 Hace falta la dirección segura» y ese aparato no entra.
  • http://t4w8mz.box.foralic.com (sin la s) redirige siempre a https://.
  • Por https:// y la IP sale un aviso de certificado. Es lo esperado: el certificado es para el nombre.

El nombre se resuelve en internet. Con el TTL de 24 horas, el aparato que lo resolvió ese día suele aguantar un corte, pero no está garantizado: cada aparato y cada router tienen su caché.

En las instalaciones que exigen https, un aparato que no resuelve el nombre no entra en Forálic hasta que vuelve la conexión. Se decidió así para que ninguna contraseña viaje sin cifrar. El programa de gestión sigue funcionando; cuando vuelva internet, recarga la página.

Algunos routers y filtros de DNS descartan las respuestas que apuntan un nombre público a una IP privada (la protección contra DNS rebinding). El síntoma: hay internet, pero el nombre no carga en ningún aparato de esa red. Se arregla una vez, con una excepción para box.foralic.com y foralic.org:

Router o filtroDónde
OpenWrt / dnsmasq/etc/config/dhcp: list rebind_domain 'box.foralic.com' y list rebind_domain 'foralic.org', o rebind-domain-ok=/box.foralic.com/foralic.org/
Fritz!BoxHeimnetz → Netzwerk → Netzwerkeinstellungen → DNS-Rebind-Schutz: añadir los dos dominios
pfSense / OPNsense (Unbound)Services → DNS Resolver → Advanced → Private Domains
Pi-hole / AdGuardQuitar el bloqueo de rebinding para esos dos dominios

Si el router no se deja configurar, la alternativa es que reparta (por DHCP) otro DNS que no filtre esas respuestas. El equipo comprueba en cada pasada si el DNS del router resuelve su nombre, y avisa a Forálic si no.

Lo que queda público y lo que depende de Forálic

Sección titulada «Lo que queda público y lo que depende de Forálic»
  • Público: el nombre del equipo, en los registros de Certificate Transparency y en el DNS, y la IP privada a la que apunta. No lo liga a ninguna farmacia, y esa IP no se alcanza desde internet.
  • De Forálic: el DNS de esos nombres. Quien lo controlara podría desviar un nombre a otra máquina y sacarle un certificado válido. Por eso la credencial de DNS que usa el servicio solo abre la zona de equipos (foralic.org), no foralic.com, y los equipos no llevan ninguna.
Lo que vesQué suele ser
El nombre no carga en ningún aparato, y hay internetEl router bloquea el nombre (DNS rebinding). Ver arriba.
No carga en un aparato concretoEse aparato usa otro DNS (una VPN, el «DNS privado» del móvil, un filtro) o recuerda una IP antigua.
«🔒 Hace falta la dirección segura»La farmacia lleva un tiempo sin internet, o el router bloquea el nombre.
«Este aparato entra sin cifrar»Ese aparato no llega a la dirección segura. Funciona, pero sin cifrar. Avisa al soporte.
Aviso de certificado al entrar por https:// y la IPNormal: el certificado es para el nombre. Entra por el nombre.

Para el informático de la farmacia: nslookup t4w8mz.box.foralic.com desde un aparato de la red tiene que devolver la IP del equipo, y openssl s_client -connect 192.168.1.20:443 -servername t4w8mz.box.foralic.com (con la IP del equipo) enseña la cadena del certificado.