2016-07-26 30 views

Antwort

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

Meistens davon entlehnt gist. Und hier ist ein toller Artikel, um mit TLS in Go zu arbeiten: https://ericchiang.github.io/tls/go/https/2015/06/21/go-tls.html

+1

Danke, dass ich deine Antwort angenommen habe, aber ich kann nicht upvote, bis ich 15 Reputationen erreiche –