【发布时间】:2020-03-12 04:15:32
【问题描述】:
是否支持这些用于 http 客户端的密码套件?
- AES128-SHA
- AES256-SHA
- DHE-RSA-AES128-SHA
- DHE-RSA-AES256-SHA
- ECDHE-RSA-AES256-SHA
连接服务器时握手失败。
更新:
我将一个 .p12 和一个 .pem 文件读入 tls.Config,然后在 http.Transport 中使用。最后一行 client.Post 返回错误“握手失败”,这不是很有帮助。
我发现上面的密码是服务器允许的密码。
b, err := ioutil.ReadFile("cert.p12")
if err != nil {
fmt.Println(err)
}
rootCA, err := ioutil.ReadFile("rootcert.pem")
if err != nil {
log.Fatalf("reading cert failed : %v", err)
}
password := "password"
privateKey, cert, caCertificates, err := pkcs12.DecodeChain(b, password)
if err != nil {
fmt.Println(err)
}
pool := x509.NewCertPool()
pool.AddCert(caCertificates[0])
pool.AddCert(caCertificates[1])
pool.AppendCertsFromPEM(rootCA)
certificate := tls.Certificate{
Certificate: [][]byte{cert.Raw},
PrivateKey: privateKey,
Leaf: cert}
conf := &tls.Config{
Certificates: []tls.Certificate{certificate},
RootCAs: pool,
MinVersion: tls.VersionTLS11,
ServerName: "api.example.com"}
transport := &http.Transport{TLSClientConfig: conf}
client := &http.Client{Transport: transport}
res, err := client.Post("api.example.com", "application/json", bufferObject)
【问题讨论】:
-
tls 包支持TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA。没有更多信息,我们无能为力
-
您似乎正在为密码套件使用速记 OpenSSL 符号。寻找 TLS RFC 中指定的那些可能会为您提供更好的信息。
-
谢谢两位。我已经更新了代码。
-
握手失败可能有很多原因,例如密码不匹配、客户端证书丢失或错误、曲线不受支持...。不幸的是,如果没有关于客户端和服务器的更多信息,这很难调试。是的,TLS 错误消息通常没有那么有用,因为在大多数情况下,客户端收到的所有消息都是“出了点问题”,这就是服务器关闭连接的原因。因此,请提供足够的信息,以便其他人可以实际重现此问题,然后可以尝试提供更好的帮助。
-
是的,这会很有帮助。可悲的是,我无权访问服务器。我将不得不进一步调查......
标签: go ssl encryption