如果双端时间不一致,可能会引发加密信道协商出问题。
- 主机端可能由于电池失效,导致时钟出错。在未联网状态下,无法获取准确时间。
- 手机端手动设置一个错误时间的概率比较低。
底层信道不支持加密时
如果在底层信道不支持加密,libp2p 提供了tls和noise两种加密。目前版本的默认值是先tls,后noise。
Noise
- 与时间无关
TLS
- 和时间有关,libp2p在生成证书时,证书有效期为一小时前到一百年后。https://github.com/libp2p/go-libp2p/blob/master/p2p/security/tls/crypto.go
- libp2p校验证书使用
"crypto/x509"
,该库校验证书时会比对证书有效期。可以设置当前时间,但未提供忽略。 - 当某一端的时间错误地设置成未来,另一端就会报错。
底层信道支持加密时
如果在底层信道支持加密,libp2p直接使用信道提供的加密。
QUIC
未测试是否受时间影响
WebRTC
未测试是否受时间影响
WebTransport
未测试是否受时间影响
方案
方案A【暂定?】
初始化时手动指定优先使用noise。
|
|
方案B【暂定?】
初始化时手动指定只使用noise,不使用tls。
- 由于tls的实现要早于noise,所以放弃tls会与只使用tls的老p2p客户端不兼容。但不兼容对我们影响不大。
- noise推出后,比tls的支持范围要普及。
- 放弃tls可以减少一些库依赖。
方案C
修改libp2p库,比如让证书有效期为固定的前后一百年。或者修改x509的代码,使之不校验时间。