CORS与客户端https证书

Rob*_*Rob 8 https pki cors

我有一个有两个https服务器的站点.一个(前端)提供由静态页面组成的UI.另一个(后端)提供微服务.他们俩都碰巧使用相同的(测试)X509证书来识别自己.单独地,我可以通过https连接到它们,需要客户端证书"tester".

到目前为止,我们通过nginx设置隐藏了CORS问题,这使得前端和后端看起来是相同的Origin.我已经为所有请求实现了标题'Access-Control-Allow-Origin','Access-Control-Allow-Credentials'; 使用方法,预检检查请求的标题(OPTIONS).

  • 在Chrome中,像这样的跨站点工作得很好.我可以看到前端URL和后端URL是不同的站点.我看到在发出后端请求之前发出了OPTIONS请求.

  • 即使Chrome似乎不需要它,我确实找到了将用于执行请求的xmlhttprequest对象并对其执行了操作xhr.withCredentials = true,因为这似乎是fetch.js在它获取时所做的事情"credentials":"include".我注意到有一个xhr.setRequestHeader可用的功能,我可能需要用来让Firefox开心.

    • Firefox对UI调用的行为相同.但对于所有后端调用,我得到405.当它这样做时,没有与服务器建立网络连接.浏览器刚刚决定这是405而没有执行任何https请求.尽管这与Chrome的行为不同,但这种做法还是有意义的.前端UI和后端服务都需要选择客户端证书.当我连接到UI时,我选择了证书"tester".当它发出后端请求时,它可以假设应该使用相同的客户端证书来到达后端.但也许它假设它可能会有所不同,而且我还需要告诉Firefox.

有没有人在这里使用CORS结合这样的2路SSL证书,并且有这个Firefox问题并在某处修复了它.我怀疑它不是服务器端修复,而是客户端需要做的事情.

Afr*_*ndr 3

我实际上没有使用客户端证书对此进行测试,但我似乎记得如果Access-Control-Allow-Origin设置为 *通配符而不是实际域,Firefox 将不会发送凭据。请参阅MDN 上的此页面

此外,Firefox 向服务器发送 CORS 请求时也存在问题,该服务器期望在 TLS 握手中提供客户端证书。基本上,Firefox 不会在预检期间发送证书,从而造成先有鸡还是先有蛋的问题。在 bugzilla 上查看此错误

  • 来自 https://bugzilla.mozilla.org/show_bug.cgi?id=1019603#c9 的 Chrome 提交者的评论表明,这里的错误实际上是在 Chrome 中,并且 Firefox 的行为是当前规范所要求的。所以了解 Safari 和 Edge 在这里做什么会很有趣。 (2认同)