【问题标题】:WebRTC server (mediasoup) throws SSL error, but only for Firefox (?!)WebRTC 服务器(mediasoup)抛出 SSL 错误,但仅适用于 Firefox(?!)
【发布时间】:2019-08-14 17:03:00
【问题描述】:

我正在一个独立的机器上运行流行的开源 mediasoup WebRTC 服务器,没有防火墙,安装了新的 SSL 证书,并且机器上几乎没有运行其他任何东西(没有 Web 服务器,没有数据库服务器,什么都没有)。当我的视频聊天应用程序尝试通过此服务器将视频流式传输到使用 Firefox 的客户端时,mediasoup 发出 SSL 错误(下面的第 2 行):

mediasoup:WARN:mediasoup-worker [id:gxzingwt#3] RTC::DtlsTransport::OnSslInfo() | received DTLS fatal alert: bad certificate +0ms
mediasoup:ERROR:mediasoup-worker [id:gxzingwt#3] RTC::DtlsTransport::CheckStatus() | OpenSSL error [desc:'SSL status: SSL_ERROR_SSL', error:'error:14102412:SSL routines:dtls1_read_bytes:sslv3 alert bad certificate'] +0ms
mediasoup:WARN:mediasoup-worker [id:gxzingwt#3] RTC::DtlsTransport::CheckStatus() | connection failed +1ms
mediasoup:WARN:mediasoup-worker [id:gxzingwt#3] RTC::DtlsTransport::Reset() | resetting DTLS transport +1ms
mediasoup:WARN:mediasoup-worker [id:gxzingwt#3] RTC::WebRtcTransport::OnDtlsFailed() | DTLS failed +0ms

现在这很奇怪,这只发生在 Firefox 浏览器上。对于 Safari、Chrome 和 Safari iOS(手机/iPad),完全没有问题。如果我有 5 个人在我的视频聊天室中进行广播,我可以打开这些人并从其他浏览器观看/流式传输视频,而不会出现任何问题。但是 Firefox(最新版本,开发者版和普通 Firefox)会导致 mediasoup 抛出 SSL 错误,并且流无法解析并向用户显示视频。

mediasoup 在端口 8443 上运行,我也在端口 443 上尝试过。我检查了调试日志,找不到任何其他问题——就是这个 SSL 问题。

我认为我的 Let's Encrypt 证书可能不好,因此我已撤销、删除并重新颁发了该域的 SSL 证书。那里没有问题或任何奇怪的东西。

我运行了openssl s_client -connect [my domain running mediasoup].com:8443 -showcerts,一切看起来都很好,证书也很好——格式与我的 Web 服务器机器上的有效证书的输出相同,也与朋友的 WebRTC 服务器的输出相同。我还在机器本身上尝试了openssl s_client -host [my domain].com -port 8443 -cert /etc/letsencrypt/live/[my domain].com/cert.pem -key /etc/letsencrypt/live/[my domain].com/privkey.pem,一切都很好。所以我不认为是证书。

由于只有 Firefox 会出现这些问题,我想可能是 Firefox 以某种方式缓存了旧的/无效的证书,所以我删除并清理了 Firefox 的缓存,并查看了我的 Mac 的 Keychain Access 应用程序以查看其中是否有任何证书对于 mediasoup 正在运行的域(没有)。

这是怎么回事?! ;-) 为什么 Firefox——而且只有 Firefox!——会导致 mediasoup 抛出这个错误,并阻止我的 Firefox 用户使用视频聊天?再次重申:使用 Chrome、Safari、iPad/iPhone,一切都运行良好。

(或者,我怎样才能让 mediasoup-worker 进程告诉我更多关于它不喜欢 SSL 证书的确切原因?)

(另外,为什么只有 Firefox 有问题?会不会是存储在 Firefox 中的证书发送到 mediasoup 服务器与之通信?我知道 WebRTC 协议很复杂并且有很多谈判,也许这是其中的一部分......就像它可能指的是与服务器域上的证书不同的证书?)

【问题讨论】:

  • 错误在于 DTLS (udp) 连接,而不是您测试的信令连接。 WebRTC 在那里使用自签名证书,其指纹在 SDP 中根据 API 进行交换。使用wireshark 捕获dtls 握手可能是最简单的(过滤dtls

标签: openssl webrtc mediasoup


【解决方案1】:

mediasoup 论坛在这里:https://mediasoup.discourse.group

顺便说一句,正如 Philipp 所说,mediasoup“没有在端口 8443 或 443 上侦听”。那是 mediasoup-demo 项目的 WebSocket 服务器。 mediasoup 根本不会自行侦听 HTTP 或 WebSocket。

如果您不向mediasoup.createWorker() 提供您的 TLS 证书,那么 mediasoup 将为 DTLS 创建自己的随机证书。您会在 DTLS 中看到该错误。

顺便说一句,我已经在 OSX 中测试了最新的 Firefox stable (68.0.2) 和 Nightly (70.0a1 (2019-08-14)),我在 DTLS 中没有收到任何 SSL 错误,所以老实说不知道。

PS:如果您可以提供更多信息(例如您正在使用哪个 mediasoup 版本),请在 mediasoup Discourse Group 的“mediasoup-demo”类别中打开一个问题。

【讨论】:

  • 谢谢 - 你帮我解决了这个问题。 SSL 证书没有传递给 mediasoup 工作人员,因此他们生成了自己的证书,而 Firefox 根本不喜欢这样。 (我最初并没有编写此代码,但我很乐意对其进行调试,哈哈)不知道究竟是为什么,但我只是给他们一个证书就很容易地解决了这个问题。感谢您对工人的快速帮助和想法,就是这样!
  • 我希望我对 mediasoup 工作人员有所了解,我写了他们:)
  • 哈哈,很酷,感谢@Iñaki 在这里回复……很明显你是专家。 ;-) 感谢 mediasoup 的出色工作,它是一款非常好的软件,对开源和 WebRTC 社区做出了非常宝贵的贡献。我的应用程序使用 mediasoup v2,但我希望让开发人员升级它以利用 v3。非常感谢❤️
  • 顺便说一句,Firefox 对缺少 SSL 证书感到不满,但 Chrome 和 Safari 没有问题。这是否意味着 Firefox 没有正确实现 WebRTC?或者这意味着 Chrome/Safari 只是更宽容并愿意忽略 SSL 问题?嗯。
  • 我不知道 Firefox 的 DTLS 证书问题(从未见过),但请随时在 Firefox 跟踪器中报告问题。
猜你喜欢
  • 1970-01-01
  • 2014-11-17
  • 2020-08-26
  • 2014-01-26
  • 1970-01-01
  • 1970-01-01
  • 2013-04-12
  • 2017-01-31
  • 1970-01-01
相关资源
最近更新 更多