From 6317abf7e4d04a05fd0837b1f41e5e41892a1aca 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") + } +}