2010-11-24 9 views
5

La configuración es la siguiente:entre dominios errores de enlace SSL en Firefox usando xhr, certificado de cliente

  • Firefox (3.x tanto y 4b) con configurado correctamente y certificados de trabajo, incluyendo un certificado de cliente .
  • Página web con un tipo XMLHttpRequest() de llamada AJAX a un subdominio diferente.
  • Servidor web personalizado en dichas solicitudes de aceptación de subdominio, respondiendo con un encabezado Access-Control-Allow-Origin permisivo y que requiere la verificación del cliente.

El problema es que Firefox aborta la solicitud (bueno, eso es lo que dice Firebug de todos modos) abruptamente. Ejecutar el programa de instalación con openssl s_server lugar insinúa que 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, realizar la llamada ajax con un elemento <script> inyectado en el DOM parece funcionar como debería ...

¿Alguien más ha topado con esto? ¿Es un error? ¿Alguna solución? ¿Hay algo obvio que falta?

+0

Una solución podría ser utilizar el proyecto Forge de código abierto: https: // github.com/digitalbazaar/forge/blob/master/README – dlongley

+0

Saludos de entrada. Forge parece un proyecto bastante ordenado, pero como requiere Flash, no es aplicable aquí. – nnevala

+0

Como una actualización, encontré [este artículo de Mozilla] (https://developer.mozilla.org/es/http_access_control) y probé el escenario con una solicitud "pre-iluminada". Que también falla de manera similar. – nnevala

Respuesta

3

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 solicitud XHR de origen cruzado por defecto. Establecer withCredentials=true en la instancia XHR resolvió el problema para mí. Tenga en cuenta que tampoco vi este problema con Chrome, solo con Firefox.

Para obtener más información, vea this Mozilla Dev Network blog post. En particular, la siguiente declaración:

Por defecto, en el cross-site invocaciones XMLHttpRequest, navegadores no enviar las credenciales. Se debe establecer un indicador específico en el objeto XMLHttpRequest cuando se invoca.

2

El motivo por el que se inyecta el script funciona a diferencia de una solicitud XHR simple debido a Single Origin Policy. Esto probablemente explicaría por qué Chrome permite el XHR pero no el FF; Chrome considera que el subdomain parte del mismo origen, pero FF no.

Inyectar scripts desde otros dominios (que es lo que hace Google Analytics) está permitido y una de las prácticas para manejar esta situación.

La manera en que mi equipo maneja esta situación es haciendo una solicitud a través de un proxy del lado del servidor.

Recomendaría utilizar un proxy del lado del servidor si puede, pero el método de inyección de scripts funciona bien siempre que el código provenga de una fuente confiable.

También encontré this article que describe su situación.

+0

¿Qué pasa con el encabezado HTTP [Access-Control-Allow-Origin] (https://developer.mozilla.org/En/HTTP_access_control)? No se puede verificar ahora, pero iirc incluso Chrome falló sin él, y ¿no se supone que maneja problemas de confianza entre dominios como este? Firefox supuestamente lo soporta desde 3.5 en adelante. – nnevala

+0

+1 por contribuir :) Servidores proxy del lado del servidor y otras soluciones posibles, pero buscando la solución menos involucrada en los componentes. Imho esto es algo que debería ser posible en 2010 ... – nnevala

+0

gracias por el enlace y voto positivo! Esta es una gran lectura ya que soy un novato con las nuevas solicitudes Cross-site. De hecho, puede ser un error, ya que este código todavía es bastante nuevo y es posible que no haya sido sometido a muchos tests de estrés. Buscaba el rastreador de errores de FF o saltaba en su canal de IRC para confirmar el error. Si es así, ¡genial! – linusthe3rd

Cuestiones relacionadas