На момент написания, Go будет автоматически говорить по TLS 1.2, если сервер поддерживает его.
tls.ConnectionState сообщает о различных согласованных параметрах TLS соединения, включая версию протокола.
Чтобы получить базовое TLS-соединение для HTTP-клиента, проще всего установить в поле DialTLS
Transport
функцию, которая устанавливает и запоминает соединение.Как только ответ получен (но перед тем, как закрыть тело ответа!), Вызовите tls.Conn.ConnectionState :
package main
import (
"crypto/tls"
"fmt"
"log"
"net"
"net/http"
)
func main() {
var (
conn *tls.Conn
err error
)
tlsConfig := http.DefaultTransport.(*http.Transport).TLSClientConfig
c := &http.Client{
Transport: &http.Transport{
DialTLS: func(network, addr string) (net.Conn, error) {
conn, err = tls.Dial(network, addr, tlsConfig)
return conn, err
},
},
}
res, err := c.Get("https://example.com")
if err != nil {
log.Fatal(err)
}
versions := map[uint16]string{
tls.VersionSSL30: "SSL",
tls.VersionTLS10: "TLS 1.0",
tls.VersionTLS11: "TLS 1.1",
tls.VersionTLS12: "TLS 1.2",
}
fmt.Println(res.Request.URL)
fmt.Println(res.Status)
v := conn.ConnectionState().Version
fmt.Println(versions[v])
res.Body.Close()
}
// Output:
// https://example.com
// 200 OK
// TLS 1.2