Go имеет полноценную реализацию TLS в стандартной библиотеке crypto/tls, написанную на чистом Go без зависимости от OpenSSL. Для HTTPS-сервера достаточно указать сертификат и ключ.
server := &http.Server{
Addr: ":443",
TLSConfig: &tls.Config{
MinVersion: tls.VersionTLS12,
},
}
server.ListenAndServeTLS("cert.pem", "key.pem")
Для автоматического получения сертификатов от Let's Encrypt используй autocert:
m := &autocert.Manager{
Cache: autocert.DirCache("certs"),
Prompt: autocert.AcceptTOS,
HostPolicy: autocert.HostWhitelist("example.com"),
}
server.TLSConfig = m.TLSConfig()
Важно: всегда устанавливай MinVersion TLS 1.2, TLS 1.0/1.1 давно небезопасны. Go реализация TLS хорошо оптимизирована и на современных CPU с AES-NI работает без заметного оверхеда. Для mutual TLS (mTLS) настраиваешь ClientCAs и ClientAuth в tls.Config.