Minimal HTTPS
http.HandleFunc("/", handler)
log.Fatal(http.ListenAndServeTLS(":443", "cert.pem", "key.pem", nil))
crypto/tlsTLS 1.3 and 1.2 client and server. Sits under net/http for HTTPS, but you can use it directly over any net.Conn.
http.HandleFunc("/", handler)
log.Fatal(http.ListenAndServeTLS(":443", "cert.pem", "key.pem", nil))
Go's default TLS config is already strong, but pinning MinVersion: TLS 1.2 is a good defensive default.
srv := &http.Server{
Addr: ":443",
TLSConfig: &tls.Config{
MinVersion: tls.VersionTLS12,
},
}
srv.ListenAndServeTLS("cert.pem", "key.pem")
caCert, _ := os.ReadFile("ca.pem")
pool := x509.NewCertPool()
pool.AppendCertsFromPEM(caCert)
client := &http.Client{
Transport: &http.Transport{
TLSClientConfig: &tls.Config{RootCAs: pool},
},
}
cert, err := tls.LoadX509KeyPair("cert.pem", "key.pem")
if err != nil { log.Fatal(err) }
cfg := &tls.Config{Certificates: []tls.Certificate{cert}}
conn, err := tls.Dial("tcp", "example.com:443", &tls.Config{ServerName: "example.com"})
if err != nil { log.Fatal(err) }
defer conn.Close()
conn.Write([]byte("GET / HTTP/1.0\r\n\r\n"))