diff --git a/transport/http_transport.go b/transport/http_transport.go index 0ad00ea1..8a4814cf 100644 --- a/transport/http_transport.go +++ b/transport/http_transport.go @@ -409,7 +409,16 @@ func (h *httpTransport) Listen(addr string, opts ...ListenOption) (Listener, err fn := func(addr string) (net.Listener, error) { if config == nil { - cert, err := mls.Certificate(addr) + hosts := []string{addr} + if h, _, e := net.SplitHostPort(addr); e == nil { + if len(h) == 0 { + hosts = getIPAddrs() + } else { + hosts = []string{h} + } + } + + cert, err := mls.Certificate(hosts...) if err != nil { return nil, err } @@ -447,3 +456,41 @@ func newHTTPTransport(opts ...Option) *httpTransport { } return &httpTransport{opts: options} } + +func getIPAddrs() []string { + ifaces, err := net.Interfaces() + if err != nil { + return nil + } + + var ipAddrs []string + + for _, i := range ifaces { + addrs, err := i.Addrs() + if err != nil { + continue + } + + for _, addr := range addrs { + var ip net.IP + switch v := addr.(type) { + case *net.IPNet: + ip = v.IP + case *net.IPAddr: + ip = v.IP + } + + if ip == nil { + continue + } + + ip = ip.To4() + if ip == nil { + continue + } + + ipAddrs = append(ipAddrs, ip.String()) + } + } + return ipAddrs +}