我正在从HTTP页面执行CORS请求,其中包含对另一个HTTPS服务器的JQuery ajax调用。此服务器向客户端请求SSL客户端证书,因此ajax查询需要提供它。
在Chrome 35中,一切都按预期工作,并修改了一些安全选项,它也适用于IE11(虽然不如Chrome)。但是,使用Firefox 29,我无法使其正常运行。使用Wireshark捕获网络流量我可以看到它在TLS握手期间提供并清空证书,因此SSL验证失败。如果我禁用SSL验证一切正常,那么CORS似乎在服务器中正确配置。
似乎firefox禁止JavaScript访问客户端证书,但我无法在文档中找到任何内容。关于我失踪的任何想法?
答案 0 :(得分:3)
默认情况下,Firefox似乎不发送带有跨源XHR请求的客户端证书。在XHR实例上设置withCredentials=true
解决了我的问题。请注意,我也没有看到Chrome的这个问题 - 只有Firefox。
有关详细信息,请参阅this Mozilla Dev Network blog post。特别是,以下声明:
默认情况下,在跨站点XMLHttpRequest调用中,浏览器会 不发送凭据。调用XMLHttpRequest对象时,必须在其上设置一个特定的标志。