dongxing5525 2016-07-26 06:54
浏览 235
已采纳

如何在GO中使用CA证书创建TLS客户端?

I want to create a tls client using the net/http in GO how can I create it given the ca certificates?

  • 写回答

1条回答 默认 最新

  • dongqun5769 2016-07-26 07:50
    关注
    package main
    
    import (
        "crypto/tls"
        "crypto/x509"
        "flag"
        "io/ioutil"
        "log"
        "net/http"
    )
    
    var (
        certFile = flag.String("cert", "someCertFile", "A PEM eoncoded certificate file.")
        keyFile  = flag.String("key", "someKeyFile", "A PEM encoded private key file.")
        caFile   = flag.String("CA", "someCertCAFile", "A PEM eoncoded CA's certificate file.")
    )
    
    func main() {
        flag.Parse()
    
        // Load client cert
        cert, err := tls.LoadX509KeyPair(*certFile, *keyFile)
        if err != nil {
            log.Fatal(err)
        }
    
        // Load CA cert
        caCert, err := ioutil.ReadFile(*caFile)
        if err != nil {
            log.Fatal(err)
        }
        caCertPool := x509.NewCertPool()
        caCertPool.AppendCertsFromPEM(caCert)
    
        // Setup HTTPS client
        tlsConfig := &tls.Config{
            Certificates: []tls.Certificate{cert},
            RootCAs:      caCertPool,
        }
        tlsConfig.BuildNameToCertificate()
        transport := &http.Transport{TLSClientConfig: tlsConfig}
        client := &http.Client{Transport: transport}
    
        // Do GET something
        resp, err := client.Get("https://localdev.local:8443")
        if err != nil {
            log.Fatal(err)
        }
        defer resp.Body.Close()
    
        // Dump response
        data, err := ioutil.ReadAll(resp.Body)
        if err != nil {
            log.Fatal(err)
        }
        log.Println(string(data))
    }
    

    Mostly borrowed from this gist. And here is a great article to work with TLS in Go: https://ericchiang.github.io/tls/go/https/2015/06/21/go-tls.html

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥40 复杂的限制性的商函数处理
  • ¥15 程序不包含适用于入口点的静态Main方法
  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码