我不确定这是否真的是 Wireshark、Go 或 Syncthing 的问题;我尝试了 Wireshark dev list和Go dev list但没有得到回应,所以我想我会在这里尝试:
我正在研究Wireshark Syncthing 解剖器。由于大多数 Syncthing 协议都封装在 TLS 中,因此我需要向 Wireshark 提供 TLS 机密。
我阅读了 Wireshark TLS 文档;Syncthing 是用 Go 编写的,所以我修补它以导出 TLS secrets,就像这样(这只是 Syncthing 上游代码加上最后两行):
// The TLS configuration is used for both the listening socket and outgoing
// connections.
var tlsCfg *tls.Config
if a.cfg.Options().InsecureAllowOldTLSVersions {
l.Infoln("TLS 1.2 is allowed on sync connections. This is less than optimally secure.")
tlsCfg = tlsutil.SecureDefaultWithTLS12()
} else {
tlsCfg = tlsutil.SecureDefaultTLS13()
}
tlsCfg.Certificates = []tls.Certificate{a.cert}
tlsCfg.NextProtos = []string{bepProtocolName}
tlsCfg.ClientAuth = tls.RequestClientCert
tlsCfg.SessionTicketsDisabled = true
tlsCfg.InsecureSkipVerify = true
// The following two lines open a file in the current directory and configure the application to dump its TLS secrets there
// See: https://pkg.go.dev/crypto/tls#example-Config-KeyLogWriter
w, err := os.OpenFile("tls-secrets.txt", os.O_WRONLY|os.O_CREATE|os.O_TRUNC, 0600)
tlsCfg.KeyLogWriter = w
这有效,并且各种内容被写入指定的文件,但是将该文件提供给 Wireshark 不会启用 TLS 解密。我检查了该文件,发现它包含CLIENT_HANDSHAKE_TRAFFIC_SECRET、SERVER_HANDSHAKE_TRAFFIC_SECRET、CLIENT_TRAFFIC_SECRET_0和SERVER_TRAFFIC_SECRET_0行,但不包含关键CLIENT_RANDOM行。我做错了什么或遗漏了什么吗?
慕桂英3389331
月关宝盒
相关分类