使用xhr,客户端证书的Firefox中的跨域SSL握手失败

nne*_*ala 5 javascript ajax https firefox client-certificates

设置如下:

  • Firefox(包括3.x和4b),具有正确设置和工作的证书,包括客户端证书.
  • 具有XMLHttpRequest()类型的AJAX调用不同子域的 Web页面.
  • 所述子域中的自定义Web服务器接受请求,使用许可Access-Control-Allow-Origin标头进行响应并要求客户端验证.

问题是Firefox突然中止了请求(好吧,这就是它在firebug中的说法).运行安装程序时openssl s_server提示Firefox实际上甚至没有发送客户端证书:

140727260153512:error:140890C7:SSL routines:SSL3_GET_CLIENT_CERTIFICATE:peer
did not return a certificate:s3_srvr.c:2965:ACCEPT
Run Code Online (Sandbox Code Playgroud)

同样精确的设置与Chrome完美配合,这可能是Firefox中的一个错误.但是,使用<script>注入DOM 的元素执行ajax调用似乎按预期工作...

那么,有没有其他人遇到这个?这是一个错误吗?任何解决方法?有什么东西明显缺失吗?

Cli*_*ris 5

5年后进行即时通讯可能对OP并没有太大帮助,但万一将来有人遇到这个问题...

默认情况下,Firefox似乎发送带有跨域XHR请求的客户端证书。withCredentials=true在XHR实例上进行设置可以为我解决问题。请注意,我也没有看到Chrome(仅限Firefox)的此问题。

有关更多信息,请参见Mozilla Dev Network博客文章。特别是以下声明:

默认情况下,在跨站点XMLHttpRequest调用中,浏览器将不发送凭据。调用XMLHttpRequest对象时,必须设置一个特定的标志。