CloudFront (S3) 客户端上的 Socket.io 不会将证书发送到 Node.js 服务器



我们使用socket.io客户端和服务器的最简单实现来消除与此问题原因有关的任何变量。socket.io客户端在AWS CloudFront上使用JavaScript,使用自定义域,服务器在节点(nginx(上。我们正在获得一个安全的连接,除了CloudFront拒绝通过证书之外,一切都如预期的那样工作。以下是我们从socket.io获得的关于连接的信息:

accept: '*/*',
origin: 'https://cdn.ourdomain.com',
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.70 Safari/537.36',
'sec-fetch-site': 'same-site',
'sec-fetch-mode': 'cors',
referer: 'https://cdn.ourdomain.com/ourapp.iframe.html',
'accept-encoding': 'gzip, deflate, br',
'accept-language': 'en-US,en;q=0.9',
cookie: '_ga=GA1.2.245674994.1569802743; __zlcmid=uXiZmTTN1V8j16; _gcl_au=1.1.312077107.1570950743; _gid=GA1.2.851127118.1572308315; __gads=ID=a55ec67b74740d6a:T=1572647855:S=ALNI_MYuzmlVp2hvDIbUS5LuYBD4kYKHlA; io=gkqtOKgx38ddpH6dAAAA; _gat=1' },
time: 'Sat Nov 02 2019 07:41:25 GMT+0000 (UTC)',
address: '::ffff:127.0.0.1',
xdomain: true,
secure: true,
issued: 1572680485150,
url: '/ourapp-secure-connection/socket.io/?EIO=3&transport=polling&t=Muh3xpR',
query: { EIO: '3', transport: 'polling', t: 'Muh3xpR' } }
Client connected [id=LKTQbOl3_DdAJeH5AAAB, cert={}]

除了cert={}之外,我们尝试过的任何操作都没有返回任何其他内容。我在AWS文档中看到了一些关于CloudFront丢弃自定义证书请求的参考资料。有人找到办法绕过这个吗?

"CloudFront拒绝通过证书">并不能完全准确地描述正在发生的事情。客户端证书不能通过像CloudFront这样的HTTP反向代理"传递"——这在设计上是不可能的,因为这相当于中间人攻击。(其他反向代理也是如此,如HTTP模式下的HAProxy和Amazon应用程序负载均衡器。(

根据设计,您不能在中间拆分打开TLS连接。看起来CloudFront就是这么做的,但事实并非如此。相反,CloudFront正在解密服务器(或客户端(的有效负载,并对其进行重新加密,以便传输到客户端(或服务器(。。。它之所以能做到这一点,是因为有两个独立的TLS会话,一个从浏览器到CloudFront,另一个从CloudFront到服务器——CloudFront在内部将解密的有效负载管道连接在一起。

相关内容

最新更新