去支持HTTP客户端的任何密码套件吗?
连接到服务器时握手失败。
更新:
我将一个.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)
答案 0 :(得分:0)
因此,解决方案最终是使用client.Do而不是http.Post
req, _ := http.NewRequest("POST", "example.com/api", mockjson)
req.Header.Set("Content-Type", "application/json")
client := &http.Client{Transport: transport}
resp, _ := client.Do(req)
不确定内部差异