diff --git a/cmd/syncthing/connections.go b/cmd/syncthing/connections.go index 745d68dc7..24bc90b58 100644 --- a/cmd/syncthing/connections.go +++ b/cmd/syncthing/connections.go @@ -41,7 +41,14 @@ func listenConnect(myID protocol.DeviceID, m *model.Model, tlsCfg *tls.Config) { next: for conn := range conns { - certs := conn.ConnectionState().PeerCertificates + cs := conn.ConnectionState() + if !cs.NegotiatedProtocolIsMutual || cs.NegotiatedProtocol != bepProtocolName { + l.Infof("Peer %s did not negotiate bep/1.0", conn.RemoteAddr()) + conn.Close() + continue + } + + certs := cs.PeerCertificates if cl := len(certs); cl != 1 { l.Infof("Got peer certificate list of length %d != 1 from %s; protocol error", cl, conn.RemoteAddr()) conn.Close() diff --git a/cmd/syncthing/main.go b/cmd/syncthing/main.go index ed6c5a2be..08d532366 100644 --- a/cmd/syncthing/main.go +++ b/cmd/syncthing/main.go @@ -72,6 +72,8 @@ const ( exitUpgrading = 4 ) +const bepProtocolName = "bep/1.0" + var l = logger.DefaultLogger func init() { @@ -461,7 +463,7 @@ func syncthingMain() { tlsCfg := &tls.Config{ Certificates: []tls.Certificate{cert}, - NextProtos: []string{"bep/1.0"}, + NextProtos: []string{bepProtocolName}, ClientAuth: tls.RequestClientCert, SessionTicketsDisabled: true, InsecureSkipVerify: true,