Golang crypto/tls.Listen and NewListener functions example
package crypto/tls
Listen creates a TLS listener accepting connections on the given network address using net.Listen. The configuration config must be non-nil and must have at least one certificate.
NewListener creates a Listener which accepts connections from an inner Listener and wraps each connection with Server. The configuration config must be non-nil and must have at least one certificate.
For this example to work, first you need to have pem and key files. On Linux/Unix machines, you can generate the files with openssl
openssl req -new -nodes -x509 -out server.pem -keyout server.key -days 365
Golang Listen() and NewListener() functions usage example
package main
import (
"fmt"
"net"
"os"
"crypto/tls"
"crypto/rand"
)
func main() {
certificate, err := tls.LoadX509KeyPair("server.pem", "server.key")
if err != nil {
fmt.Println(err)
os.Exit(1)
}
// For ClientAuth : tls.RequireAnyClientCert. See http://golang.org/pkg/crypto/tls/#ClientAuthType
config := tls.Config{Certificates : []tls.Certificate{certificate}, ClientAuth: tls.RequireAnyClientCert}
config.Rand = rand.Reader
var newnetlistener, netlistener net.Listener
// The network net must be a stream-oriented network: "tcp", "tcp4", "tcp6", "unix" or "unixpacket".
// see http://golang.org/pkg/net/#Listen
var network = "tcp"
var laddr = "0.0.0.0:8000" // laddr = address to listen
netlistener, err = tls.Listen(network, laddr, &config)
if err != nil {
fmt.Println(err)
os.Exit(1)
}
fmt.Println("[Server Status] : Listening")
newnetlistener = tls.NewListener(netlistener, &config) // New Listener
fmt.Println("[Server Status] : New Listener Listening")
for {
conn, err := netlistener.Accept()
newconn, err := newnetlistener.Accept()
if err != nil {
fmt.Println(err)
}
fmt.Printf("[Server Status] : Accepted connection from %s", conn.RemoteAddr())
fmt.Printf("[Server Status] : Accepted connection from %s", newconn.RemoteAddr())
}
}
Output :
[Server Status] : Listening
[Server Status] : New Listener Listening
References :
Advertisement
Something interesting
Tutorials
+4.2k Golang : Get FX sentiment from website example
+18.3k Golang : Compare floating-point numbers
+5.1k AWS S3 : Prevent Hotlinking policy
+17.1k Golang : Logging with logrus
+13.3k Golang : Parsing or breaking down URL
+17.9k Golang : Clearing slice
+5.4k CodeIgniter : form input set_value cause " to become & quot
+8.9k Golang : Channels and buffered channels examples
+5.2k Javascript : Generate random key with specific length
+16.1k Golang : Iterate linked list example
+9.3k JavaScript/JQuery : Detect or intercept enter key pressed example