From ef80bb5cbf13095204b60839a0e40da3699f5f0e Mon Sep 17 00:00:00 2001 From: Yicheng Qin Date: Tue, 14 Jul 2015 12:18:15 -0700 Subject: [PATCH] pkg/transport: fix HTTPS downgrade bug for keepalive listener If TLS config is empty, etcd downgrades keepalive listener from HTTPS to HTTP without warning. This results in HTTPS downgrade bug for client urls. The commit returns error if it cannot listen on TLS. --- pkg/transport/keepalive_listener.go | 6 +++++- pkg/transport/keepalive_listener_test.go | 7 +++++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/pkg/transport/keepalive_listener.go b/pkg/transport/keepalive_listener.go index cc7ed9e71..6f580619a 100644 --- a/pkg/transport/keepalive_listener.go +++ b/pkg/transport/keepalive_listener.go @@ -16,6 +16,7 @@ package transport import ( "crypto/tls" + "fmt" "net" "time" ) @@ -28,7 +29,10 @@ func NewKeepAliveListener(addr string, scheme string, info TLSInfo) (net.Listene return nil, err } - if !info.Empty() && scheme == "https" { + if scheme == "https" { + if info.Empty() { + return nil, fmt.Errorf("cannot listen on TLS for %s: KeyFile and CertFile are not presented", scheme+"://"+addr) + } cfg, err := info.ServerConfig() if err != nil { return nil, err diff --git a/pkg/transport/keepalive_listener_test.go b/pkg/transport/keepalive_listener_test.go index f9458436a..b8317dc93 100644 --- a/pkg/transport/keepalive_listener_test.go +++ b/pkg/transport/keepalive_listener_test.go @@ -62,3 +62,10 @@ func TestNewKeepAliveListener(t *testing.T) { conn.Close() tlsln.Close() } + +func TestNewKeepAliveListenerTLSEmptyInfo(t *testing.T) { + _, err := NewListener("127.0.0.1:0", "https", TLSInfo{}) + if err == nil { + t.Errorf("err = nil, want not presented error") + } +}