Rails和WebSockets在开发环境中使用SSL/TLS

4

我有一个使用ActionCable的Rails 4.2.x应用程序。

目标

由于我正在使用Devise FIDO U2F gem,因此我必须从HTTP切换到HTTPS。 所有应用程序都正常工作,我的(自签名)证书在Chrome中有效(绿色锁图标),并且在KeyChain Access中具有当使用此证书时信任证书部分到始终信任

我正在将WebSocket从ws://my.app.eu:28080迁移到wss://my.app.eu:28080

问题

我使用Puma运行ActionCable服务器,但我发现Puma正在使用eventmachine这不兼容。 因此,我将ActionCable服务器迁移到thin,但从未使其工作。

我被Chrome控制台的错误消息所困扰:

WebSocket connection to 'wss://my.app.eu:28080/' failed: WebSocket opening handshake was canceled

奇怪的事情

我还不知道为什么和如何,但是有两次它突然在Chome中工作了(不再出现错误并且可以看到通过ActionCable到达Chrome的消息),就像某些东西被解除了阻止。

我的意思是,当订阅队列时,应用程序正在记录,当它突然工作时,我在应用程序日志文件中看到了这些日志。

问题

  • 我需要做什么才能使其正常工作?
  • 有没有办法查看它卡住的地方?
  • 你知道一个地方可以解释如何通过SSL将Rails开发环境与WebSockets一起使用吗?

如果您可以使用nginx将SSL/TLS请求路由到纯文本应用程序,那可能会更好。生产环境通常使用这种设计和框架支持(以及应用程序服务器支持)的SSL/TLS往往不如nginx提供的安全性。您还可以尝试iodine HTTP/Websocket服务器。除了支持ActionCable的劫持外,您还可以使用本地websocket和pub/sub支持,这通常更快(我是作者,我有偏见)。 iodine假定代理(nginx / apache)处理SSL/TLS,类似于生产环境。 - Myst
从您提供的问题中,我看到该问题已在Puma 3.9.0及以上版本中得到解决。您尝试更新Puma gem到最新版本了吗? - Myst
我不确定修复是否与 Puma 有关(老实说,我没有完全阅读问题...)。我们正在使用 Puma 2.x,所以让我们尝试更新它 :) 谢谢 @Myst - ZedTuX
2
刚刚尝试了Puma 3.11.2,但我遇到了与升级之前相同的错误:Error raised inside the event loop: no implicit conversion of Puma::MiniSSL::Socket into Integer :( - ZedTuX
@ZedTuX,你解决过Puma::MiniSSL::Socket转换成整数问题了吗? - SSR
@SSR 不行,唯一的方法就是切换到Thin。 - ZedTuX
1个回答

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接