WebRTC服务器(mediasoup)抛出SSL错误,但仅适用于Firefox(?!)

时间:2019-08-14 17:03:00

标签: openssl webrtc mediasoup

我在一个没有防火墙,没有安装新SSL证书的独立机器上运行流行的开放源代码mediasoup WebRTC服务器,并且机器上实际上没有其他任何运行(没有Web服务器,没有数据库服务器,什么也没有) 。当我的视频聊天应用尝试通过该服务器将视频流传输到使用Firefox的客户端时,mediasoup会发出SSL错误(下面的第二行):

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问题就是这样。

我以为我的“让我们加密”证书不好,所以我已经吊销,删除并重新发布了该域的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协议很复杂,并且存在很多问题谈判,也许这是其中的一部分……就像它所指的是与服务器域上的证书不同的证书吗?)

1 个答案:

答案 0 :(得分:3)

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

如Philipp所说,

BTW,mediasoup“不在端口8443或443中监听”。这就是 mediasoup-demo 项目的WebSocket服务器。 mediasoup根本不会自己侦听HTTP或WebSocket。

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

顺便说一句,我已经在OSX中最新的Firefox稳定版(68.0.2)和Nightly(70.0a1(2019-08-14))中进行了测试,并且DTLS中没有SSL错误,所以说实话没有主意。 / p>

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