¿Cómo se deben compartir los certificados entre un proxy y una interfaz de usuario?

6

En el trabajo, me pidieron que estudie la creación de una topología de referencia para una aplicación de chat WebSocket, que incluye un proxy entre el servidor de frontend y el backend. En este momento, todavía estoy ejecutando el frontend y el backend en el mismo servidor para el desarrollo, pero temporalmente he configurado los WebSockets para que apunten al proxy, que se encuentra en un servidor completamente independiente en el laboratorio. Ambos servidores están en una red interna, y cada uno tiene un certificado separado y autofirmado.

Cuando estaba probando el WebSocket sobre TLS, falló debido a que el certificado estaba autofirmado (sin mostrar ningún diálogo para hacer una excepción) hasta que me conecté directamente al proxy e hice una excepción para el certificado. Después de eso, funcionó perfectamente bien, pero en la práctica, al visitante probablemente no se le permitiría hacer eso. Por lo tanto, tengo que averiguar cómo certificar ambos al mismo tiempo.

Por lo que puedo decir, las principales formas de hacerlo son:

  • Coloque el proxy y la interfaz en diferentes subdominios (por ejemplo, frontend.domain.com y proxy.domain.com ), y use un certificado comodín para el sitio. Esto sería más rápido y más fácil de trabajar en el laboratorio, pero el IETF lo desalienta .
  • Use un único certificado con nombres alternativos de sujeto, e incluya tanto frontend.mydomain.com como proxy.mydomain.com debajo del campo SAN para www. mydomain.com . Por lo que puedo decir, esto comparte el problema de garantizar los dominios rogue / buggy.
  • Use certificados completamente separados para los dos servidores, como ya estoy haciendo. Es más complicado trabajar con ellos, especialmente con certificados autofirmados, pero si un dominio está comprometido, eso es solo un punto de falla. Mi pregunta principal aquí es que si los certificados de proxy y frontend no fueran autofirmados, ¿sería más probable que esto funcione?

¿Hay algo que haya pasado por alto con lo anterior, o hay otros métodos?

EDITAR 22/07/2015: Aparte de eso, al enviar un XMLHttpRequest a través del mismo mecanismo, descubrí que tenía que desactivar la verificación del certificado entre el proxy y el backend para permitir que el protocolo SSL siguiera adelante, por lo que Me pregunto si mis certificados autofirmados fueron la verdadera causa del problema. Sin embargo, eso probablemente no resuelve mi problema anterior.

    
pregunta Philip Rowlands 21.07.2015 - 13:25
fuente

1 respuesta

2

Si tiene un certificado autofirmado, necesita que sus clientes confíen en él.

Alternativamente, puede hacer que el cliente no verifique si el certificado es de confianza, pero es una idea terrible.

Cómo lo haces depende de tus clientes. Si tienes algo como esto:

[user-agent]---------[frontend]---------[proxy]---------[backend]

El agente de usuario (probablemente un navegador) es el cliente para el frontend, el frontend es el cliente para el proxy y el proxy para el backend.

Cada cliente aquí debe confiar en el certificado ofrecido por el servidor, ya sea porque está firmado por una entidad de confianza o porque agrega el certificado autofirmado al almacén de confianza.

Así que sí, el autofirmado puede darte problemas

Si el proxy está allí por motivos de escalabilidad, habrá más hosts backend en el futuro.

Si todas las comunicaciones detrás de la interfaz son internas a su organización, puede configurar su propia CA interna y confiar en su certificado raíz en la interfaz y el proxy.

De esta manera puede agregar nuevos hosts internamente cada uno con su propio certificado y los clientes confiarán automáticamente en él.

El uso de certificados diferentes para servidores diferentes suele ser una buena idea, independientemente de si implementa su propia CA o no. Cuando se comprometa una clave, debe revocar los certificados para esa clave, y cualquier host que haya compartido certificados con el comprometido también necesitará nuevos certificados.

    
respondido por el GnP 24.08.2016 - 16:41
fuente

Lea otras preguntas en las etiquetas