受支持的http密码套件在哪里?

时间:2019-11-16 01:26:22

标签: go ssl encryption

去支持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)

1 个答案:

答案 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)

不确定内部差异