golang-mtls-example/cmd/client/client.go

52 lines
938 B
Go

package main
import (
"crypto/tls"
"crypto/x509"
"io"
"log"
"mtls/pkg/castore"
"net/http"
"os"
)
var certPool *x509.CertPool
const (
CLIENT_CRT_FILE = "pki/client.crt"
CLIENT_KEY_FILE = "pki/client.key"
SERVER_ADDRESS = "https://localhost:8080/hello"
)
func main() {
log.Default().SetFlags(log.Lshortfile)
certPool = castore.NewCAstore()
clientKeyPair, err := tls.LoadX509KeyPair(CLIENT_CRT_FILE, CLIENT_KEY_FILE)
if err != nil {
log.Fatal(err)
}
client := &http.Client{
Transport: &http.Transport{
TLSClientConfig: &tls.Config{
RootCAs: certPool,
Certificates: []tls.Certificate{clientKeyPair},
},
},
}
resp, err := client.Get(SERVER_ADDRESS)
if err != nil {
log.Fatal(err)
}
for _, cert := range resp.TLS.PeerCertificates {
log.Printf("Peer certificate CommonName: %s", cert.Subject.CommonName)
}
_, err = io.Copy(os.Stdout, resp.Body)
if err != nil {
log.Fatal(err)
}
}