|
@@ -15,6 +15,7 @@
|
|
package activation
|
|
package activation
|
|
|
|
|
|
import (
|
|
import (
|
|
|
|
+ "crypto/tls"
|
|
"net"
|
|
"net"
|
|
)
|
|
)
|
|
|
|
|
|
@@ -35,3 +36,27 @@ func Listeners(unsetEnv bool) ([]net.Listener, error) {
|
|
}
|
|
}
|
|
return listeners, nil
|
|
return listeners, nil
|
|
}
|
|
}
|
|
|
|
+
|
|
|
|
+// TLSListeners returns a slice containing a net.listener for each matching TCP socket type
|
|
|
|
+// passed to this process.
|
|
|
|
+// It uses default Listeners func and forces TCP sockets handlers to use TLS based on tlsConfig.
|
|
|
|
+func TLSListeners(unsetEnv bool, tlsConfig *tls.Config) ([]net.Listener, error) {
|
|
|
|
+ listeners, err := Listeners(unsetEnv)
|
|
|
|
+
|
|
|
|
+ if listeners == nil || err != nil {
|
|
|
|
+ return nil, err
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if tlsConfig != nil && err == nil {
|
|
|
|
+ tlsConfig.NextProtos = []string{"http/1.1"}
|
|
|
|
+
|
|
|
|
+ for i, l := range listeners {
|
|
|
|
+ // Activate TLS only for TCP sockets
|
|
|
|
+ if l.Addr().Network() == "tcp" {
|
|
|
|
+ listeners[i] = tls.NewListener(l, tlsConfig)
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ return listeners, err
|
|
|
|
+}
|