Socket.IO:阻止跨源请求:同源策略禁止读取远程资源

问题描述 投票:0回答:1

我在FF中有一个奇怪的问题,在Chrome中没有重现:使用SSL连接时,与其他来源的websocket连接不起作用。

我的Rails应用程序在https://wax.lvh.me:3000上运行,socket.io节点JS应用程序在https://wax.lvh.me:3001上运行。当我尝试从FF中的Rails应用程序连接到套接字时,我在浏览器的开发控制台中看到以下警告:

enter image description here

当我打开网络选项卡时,我看到以下响应标头 - 请注意响应中没有访问控制标头:

enter image description here我尝试使用以下其他SO食谱的食谱:

'*:*'建立this answer的起源

io = require('socket.io').listen(server)
io.set('origins', '*:*');

将起源设置为this answer中的函数

io.origins (origin, callback) =>
  if origin.match(/lvh\.me/)
    return callback(null, true)

  callback('Origin not allowed', false)

但到目前为止,没有什么能帮助我解决这个问题

请注意,Chrome中的访问控制标头设置正确:

enter image description here

我使用以下浏览器和工具版本:

  • Firefox - 63.0.3(64位)
  • 谷歌浏览器 - 版本73.0.3683.39(官方版本)测试版(64位)
  • socket.IO - 2.2.0

你有任何想法如何在socket.io中为FF正确设置CORS吗?

ssl firefox socket.io cors
1个回答
0
投票

我们的socket.io应用程序中的CORS配置一切正常

问题出在SSL证书上:我们的配置在HTTPS服务器初始化中缺少ca(中间证书)选项。我们用这段代码解决了这个问题:

require('https').createServer({
  ca: fs.readFileSync(process.env.SSL_CA),         // this config was missing
  cert: fs.readFileSync(process.env.SSL_CERT),
  key: fs.readFileSync(process.env.SSL_KEY)
})

正如nodeJS create Secure Context documentation所说:

ca string | string[] | Buffer | Buffer[]。 (可选)覆盖可信CA证书。默认是信任由Mozilla策划的知名CA.使用此选项明确指定CA时,Mozilla的CA将完全替换。值可以是字符串或缓冲区,也可以是字符串和/或缓冲区数组。任何字符串或缓冲区都可以包含多个连接在一起的PEM CA.对等方的证书必须可链接到服务器信任的CA,以便对要进行身份验证的连接进行验证。使用不可链接到知名CA的证书时,必须将证书的CA明确指定为受信任,否则连接将无法进行身份验证。如果对等方使用的证书与其中一个默认CA不匹配或链接,请使用ca选项提供对等方证书可以匹配或链接到的CA证书。对于自签名证书,证书是其自己的CA,必须提供。对于PEM编码证书,支持的类型为“TRUSTED CERTIFICATE”,“X509 CERTIFICATE”和“CERTIFICATE”。

© www.soinside.com 2019 - 2024. All rights reserved.