参与 p2p 通信的对等方如何相互验证?

How do peers involved in a p2p communication authenticate each other?

WebRTC 中的点如何相互验证?

WebRTC 中的 DTLS 使用 self-signed 证书。 RFC 5763 有详细信息,简而言之,证书指纹与 SDP 的 a=fingerprint 行中提供的指纹相匹配。

正如 Patrick Mevzek 的评论所述:

它不依赖于 DTLS 或 TLS,如果 self-signed 证书是 trusted/accepted。

这仅取决于对等方的可信证书。如果客户端或服务器的 certificate path/chain 包含一个证书,该证书的签名可以通过受信任的证书进行验证,则认为它是受信任的。可能会有一些额外的检查作为有效时间或 key-usage 或主机名。受信任的证书通常存储在“信任库”中。 因此,如果您的服务器应该使用这样的 self-signed 证书,请将 self-signed 添加到您的客户端的 trust-store。如果客户端随后只收到 self-signed 证书作为路径,它会检查签名者(在这种情况下是证书本身)是否在信任库中。

此类 self-signed 证书不起作用的是,其他尚未将该证书添加到其信任库的客户端将信任该服务器。

How do peers in p2p systems like Webrtc authenticate each other?

如果这些节点提前将对方的证书添加到他们的信任库中,那么他们就会相互信任。

Do they require a certificate from a CA?

如果你不能提前添加对方的证书,那么你需要证书,这些证书是由CA(证书)签名的,它已经在对等方的信任库中。