ssl - 如何在 GO 中创建带有 ca 证书的 tls 客户端?

标签 ssl go https net-http

我想使用 net/http 创建一个 tls 客户端在 GO 中如何根据 ca 证书创建它?

最佳答案

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))
}

主要是借用这个gist .这是一篇在 Go 中使用 TLS 的好文章:https://ericchiang.github.io/tls/go/https/2015/06/21/go-tls.html

关于ssl - 如何在 GO 中创建带有 ca 证书的 tls 客户端?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38582937/

相关文章:

asp.net-mvc - MVC3、RequireHttps 和自定义处理程序导致 http 310

ssl - 在 web.config 中将 URL 重写为 https 并且非 www 到 www 并且没有尾部斜杠

asp.net - 在 asp.net 中检索 SSL session ID

go - 多个 goroutines 在一个 channel 上有选择地监听

go - 无法在 Golang 中导入本地模块

适用于 HTTP 和 HTTPS 的 Django CSRF

ssl - 解密 HTTPS 流量并将清晰的流量保存到 pcap 文件中

c++ - 作为 win32 服务运行时 OpenSSL SSL_CTX_new 崩溃

c# - 证书中没有私钥的证书认证和消息安全

go - goroutine日程安排如何与GOMAXPROCS一起使用?