CORS con certificados https del cliente

Tengo un sitio con dos servidores https. Uno (frontend) sirve una interfaz de usuario hecha de páginas estáticas. El otro (backend) sirve un microservicio. Ambos utilizan el mismo certificado X509 (prueba) para identificarse. Individualmente, puedo conectarme a ambos a través de https que requieren el certificado de cliente "probador".

Estábamos ocultando problemas de CORS hasta ahora al pasar por una configuración de nginx que hace que el frontend y el backend parezcan que son del mismo origen. He implementado los encabezados 'Access-Control-Allow-Origin', 'Access-Control-Allow-Credentials' para todas las solicitudes; con métodos, encabezados para solicitudes de verificación previa al vuelo (OPTIONS).

En Chrome, los sitios cruzados como este funcionan bien. Puedo ver que las URL de front-end y las de backend son sitios diferentes. Veo que las solicitudes de OPCIONES se realizan antes de que se realicen las solicitudes de back-end.

Aunque Chrome no parece necesitarlo, encontré el objeto xmlhttprequest que se usará para realizar la solicitud e hice unxhr.withCredentials = true en eso, porque eso parece ser lo que fetch.js hace bajo el capó cuando se pone"credentials":"include". Me di cuenta de que hay unxhr.setRequestHeader función disponible que podría necesitar usar para hacer feliz a Firefox.

Firefox se comporta de manera idéntica para las llamadas de UI. Pero para todas las llamadas de back-end, obtengo un 405. Cuando lo hace, no se realiza ninguna conexión de red al servidor. El navegador acaba de decidir que este es un 405 sin ejecutar ninguna solicitud https. Aunque este es un comportamiento diferente al de Chrome, tiene sentido. Tanto la interfaz de usuario front-end como el servicio de back-end necesitan un certificado de cliente para ser elegido. Elegí el certificado "probador" cuando me conecté a la interfaz de usuario. Cuando se trata de hacer una solicitud de back-end, se puede suponer que se debe utilizar el mismo certificado de cliente para llegar al back-end. Pero tal vez asume que podría ser diferente, y hay algo más que necesito decirle a Firefox.

¿Alguien aquí está usando CORS en combinación con certificados SSL de 2 vías como este, y tuvo este problema de Firefox y lo solucionó en alguna parte? Sospecho que no es una solución del lado del servidor, sino algo que el cliente debe hacer.

Respuestas a la pregunta(1)

Su respuesta a la pregunta