errores de enlace SSL entre dominios en Firefox usando xhr, certificado de cliente
-
28-09-2019 - |
Pregunta
La configuración es la siguiente:
- Firefox (3.x tanto y 4b) con correctamente configurado y certificados, incluyendo un certificado de cliente de trabajo.
- página web con un tipo de XMLHttpRequest () de llamada AJAX a un subdominio diferente .
- Custom servidor web en dicho subdominio aceptar solicitudes, reponding con una cabecera
Access-Control-Allow-Origin
permisiva y que requiere la verificación del cliente .
El problema es que Firefox aborta la solicitud (bueno, eso es lo que se dice en firebug de todos modos) bruscamente. Ejecutar el programa de instalación con openssl s_server
indicios de que en lugar de Firefox en realidad ni siquiera enviar el certificado de cliente:
140727260153512:error:140890C7:SSL routines:SSL3_GET_CLIENT_CERTIFICATE:peer
did not return a certificate:s3_srvr.c:2965:ACCEPT
La misma configuración exacta funciona perfectamente con Chrome, lo que sugiere tal vez un error en Firefox. Sin embargo, la realización de la llamada AJAX con un elemento <script>
inyectado en el DOM parece funcionar según lo previsto ...
Por lo tanto, nadie más ha funcionado en esto? ¿Es un error? Soluciones provisionales? No se encuentra allí algo obvio?
Solución
Avisador en 5 años más tarde, probablemente no es de mucha ayuda para el PO, pero en caso de que alguien más tiene este problema en el futuro ...
Firefox parece no enviar el certificado de cliente con una petición XHR de origen cruzado por defecto. Configuración withCredentials=true
en la instancia XHR resuelva el problema para mí. Tenga en cuenta que yo tampoco veo este problema con Chrome -. Sólo Firefox
Para más información ver esta entrada del blog de Mozilla Dev red . En particular, la siguiente declaración:
Por defecto, en las invocaciones XMLHttpRequest entre sitios, los navegadores que tengan No enviar las credenciales. Una bandera específica tiene que ser establecido en el objeto XMLHttpRequest cuando se invoca.
Otros consejos
La razón por la inyección de los trabajos de guión en lugar de una simple petición XHR se debe a la sola política Origen . Esto probablemente explica por qué Chrome permite que el XHR pero no FF; Chrome considera la parte subdominio del mismo origen, pero FF no lo hace.
La inyección de secuencias de comandos de otros dominios (que es lo que hace Google Analytics) está permitido y una de las prácticas para manejar esta situación.
La forma en que mi manijas del equipo esta situación es haciendo una solicitud a través de un proxy del lado del servidor.
Yo recomiendo usar un proxy del lado del servidor, si se puede, pero el método de inyección script funciona bien siempre y cuando el código está viniendo de una fuente de confianza.
también encontré este artículo que describe su situación.