Seguridad y privacidad

Solución al error de contexto seguro HTTPS en Vaultwarden mediante un proxy inverso

Vaultwarden requiere HTTPS para las APIs criptográficas del navegador. Aprende a resolver el error de contexto seguro utilizando Caddy como proxy inverso.

Un rack de servidores con un candado digital verde brillante y un icono de escudo que representan conexiones HTTPS seguras.
Ilustración creada para este artículo

Traducido automáticamente del original en inglés.

Los autoalojadores que despliegan Vaultwarden suelen encontrarse con un error bloqueante al acceder a la bóveda web mediante HTTP simple desde otra máquina. La aplicación se niega a cargarse, citando la ausencia de un contexto seguro necesario para las operaciones criptográficas. Este problema se debe a los estándares de seguridad de los navegadores y no a un fallo de software, lo que exige un ajuste específico de la infraestructura para su resolución.

Qué ocurrió

Cuando los usuarios inician Vaultwarden usando un comando básico de Docker que mapea el puerto 8000 al puerto 80, pueden acceder a la interfaz localmente a través de localhost. Sin embargo, intentar alcanzar el servicio desde otro dispositivo en la red local mediante una dirección IP provoca un fallo. El navegador muestra un error indicando que se requiere un contexto seguro para que funcione la API Subtle Crypto. Esto impide que la página de inicio de sesión se renderice correctamente y detiene cualquier interacción posterior con el gestor de contraseñas.

La causa raíz reside en cómo los navegadores modernos manejan funciones criptográficas sensibles. Vaultwarden depende de la Web Crypto API para cifrar y descifrar los datos de la bóveda directamente dentro del navegador. Los navegadores restringen el acceso a esta API a contextos seguros, definidos como páginas servidas sobre HTTPS o desde localhost. Acceder al servicio mediante una dirección IP local sobre HTTP no califica como un contexto seguro, lo que hace que el objeto crypto.subtle sea indefinido y rompa la funcionalidad principal de la aplicación.

Para corregir esto, el enfoque recomendado consiste en colocar un proxy inverso delante del contenedor de Vaultwarden. La guía demuestra el uso de Caddy, un servidor web conocido por sus capacidades automáticas de HTTPS. Al configurar Caddy para manejar la terminación TLS y reenviar las solicitudes a la instancia de Vaultwarden, los usuarios pueden establecer el contexto seguro necesario. Esta configuración garantiza que todas las conexiones de cliente, ya sean desde navegadores de escritorio o aplicaciones móviles, ocurran sobre HTTPS, satisfaciendo tanto los requisitos de seguridad del navegador como las políticas de las aplicaciones cliente.

Detalles clave

  • Se utilizó la versión 1.37.4 de Vaultwarden en el entorno de pruebas, ejecutándose en Docker.
  • El error ocurre porque crypto.subtle no está disponible en contextos HTTP no seguros desde IPs remotas.
  • El acceso a localhost sobre HTTP renderiza la página pero falla con los clientes modernos de Bitwarden que requieren HTTPS.
  • Caddy se configuró con tls internal para pruebas y reverse_proxy para reenviar el tráfico.
  • La variable de entorno DOMAIN debe coincidir con la URL HTTPS utilizada por los clientes.
  • El registro abierto debe deshabilitarse mediante SIGNUPS_ALLOWED=false tras la creación inicial de la cuenta.

Contexto

Los contextos seguros son una característica fundamental de la seguridad web que protege las APIs sensibles de ser expuestas sobre conexiones inseguras. La API Subtle Crypto, utilizada para operaciones de alta seguridad como la generación de claves y el cifrado, solo es accesible dentro de estos contextos. Esta restricción previene ataques de intermediario (man-in-the-middle) donde un atacante podría interceptar o manipular claves criptográficas transmitidas sobre HTTP simple. Para aplicaciones autoalojadas como Vaultwarden, que manejan datos personales sensibles, esta aplicación a nivel de navegador asegura que el cifrado ocurra de forma segura en el lado del cliente antes de que los datos lleguen al servidor.

Los proxies inversos actúan como intermediarios entre los clientes y los servicios backend. Gestionan las solicitudes entrantes, administran los certificados SSL/TLS y reenvían el tráfico al servicio interno adecuado. El uso de un proxy inverso como Caddy simplifica el despliegue de HTTPS automatizando la gestión de certificados. En lugar de configurar TLS directamente dentro del contenedor de la aplicación, lo cual puede ser complejo y propenso a errores, el proxy maneja la conexión segura externamente. Esta arquitectura también permite que el servicio backend escuche solo en localhost, reduciendo su exposición a la red y mejorando la postura general de seguridad.

Por qué importa

Para equipos e individuos que ejecutan su propio software, entender la distinción entre el acceso local y el de red es crucial. Una configuración que funciona perfectamente en la máquina host puede fallar completamente para otros usuarios en la red si HTTPS no está correctamente configurado. Este problema destaca la importancia de tratar los servicios autoalojados con el mismo rigor de seguridad que las aplicaciones públicas. Ignorar los requisitos de HTTPS puede llevar a funcionalidades rotas, especialmente a medida que las aplicaciones cliente se vuelven más estrictas en la aplicación de conexiones seguras.

Además, la dependencia de la criptografía basada en navegador significa que la infraestructura que soporta la aplicación debe garantizar la seguridad del transporte. Sin un certificado HTTPS válido, toda la propuesta de valor de un gestor de contraseñas de conocimiento cero se ve comprometida, ya que el navegador no puede realizar los pasos de cifrado necesarios. Implementar un proxy inverso no solo corrige el error inmediato, sino que también establece una base escalable para añadir más servicios en el futuro, todos beneficiándose de una gestión centralizada de certificados y controles de acceso seguros.

Qué puedes hacer

  • Despliega un proxy inverso como Caddy o Nginx delante de tu contenedor de Vaultwarden.
  • Configura el proxy para servir HTTPS utilizando un certificado válido, como Let's Encrypt para dominios públicos.
  • Vincula Vaultwarden solo a 127.0.0.1, asegurando que no sea directamente accesible desde la red.
  • Establece la variable de entorno DOMAIN a la URL HTTPS exacta que usarán los clientes para conectarse.
  • Desactiva los registros abiertos estableciendo SIGNUPS_ALLOWED en false después de crear tu cuenta de administrador.
  • Verifica que los clientes móviles puedan conectar, asegurando que la cadena de certificados sea confiable en todos los dispositivos.

Más noticias

Todas las noticias