在发起请求的时候,咱们有时会遇到类似 tls: server selected unsupported protocol version 301
的错误
分析问题
这个报错是由于这个服务只支持低版本的tls协议。
TLS(Transport Layer Security)是一种用于加密和保护网络通信的协议。
版本号301代表TLS 1.0,这是一个较旧的TLS版本,可能不再被某些服务器或应用程序支持。
解决办法
在Go中,可以使用crypto/tls包来设置HTTP请求的最低TLS版本。
你需要创建一个自定义的tls.Config对象,并将其传递给http.Transport的TLSClientConfig字段。
package main
import (
"crypto/tls"
"fmt"
"io/ioutil"
"net/http"
)
func main() {
// 创建一个自定义的tls.Config对象并设置最低TLS版本为TLS 1.0
tlsConfig := &tls.Config{
// 因为上面说不支持版本301,也就是TLS 1.0,所以这里设置10
MinVersion: tls.VersionTLS10,
}
// 创建一个基于自定义tls.Config的Transport
tr := &http.Transport{
TLSClientConfig: tlsConfig,
}
// 创建一个基于自定义Transport的HTTP客户端
client := &http.Client{
Transport: tr,
}
// 发送GET请求
resp, err := client.Get("https://example.com")
if err != nil {
fmt.Println("请求失败:", err)
return
}
defer resp.Body.Close()
// 将响应结果以流的方式显示在输出端
io.Copy(os.Stdout, resp.Body)
}
在这个示例中,我们创建了一个自定义的tls.Config对象,并将其MinVersion字段设置为tls.VersionTLS10,即TLS 1.0。
然后,我们将这个自定义的tls.Config用作http.Transport的TLSClientConfig字段。
这样,HTTP客户端将只允许与服务器建立TLS 1.0及更高版本的连接。
你可以根据需要修改示例代码中的最低TLS版本。以下是一些可用的常量:
tls.VersionTLS13: TLS 1.3
tls.VersionTLS12: TLS 1.2
tls.VersionTLS11: TLS 1.1
tls.VersionTLS10: TLS 1.0
请注意,某些服务可能不支持较低的TLS版本,因此在设置最低TLS版本时应谨慎评估目标服务器的配置和要求。
- unsupported 客户端 selected protocol 错误unsupported客户端selected protocol unsupported handshake selected protocol repositories unsupported仓库protocols sslhandshakeexception selected protocol version scan unsupported parsetime错误 unsupported envelope routines错误 character protocol错误invalid pastespecial selection错误word 错误select 客户端 错误 版本 客户