54 lines
883 B
Go
54 lines
883 B
Go
|
package main
|
||
|
|
||
|
import (
|
||
|
"fmt"
|
||
|
"net/http"
|
||
|
"io"
|
||
|
"crypto/tls"
|
||
|
"crypto/x509"
|
||
|
"os"
|
||
|
)
|
||
|
|
||
|
func main() {
|
||
|
rawpem, err := os.ReadFile("certs/root.pem")
|
||
|
if err != nil {
|
||
|
fmt.Println("pem read error:", err)
|
||
|
return
|
||
|
}
|
||
|
|
||
|
cert, err := tls.LoadX509KeyPair("certs/client.pem", "certs/client.key")
|
||
|
if err != nil {
|
||
|
fmt.Println("cert load error:", err)
|
||
|
return
|
||
|
}
|
||
|
|
||
|
pool := x509.NewCertPool()
|
||
|
if !pool.AppendCertsFromPEM(rawpem) {
|
||
|
fmt.Println("add pem not ok")
|
||
|
return
|
||
|
}
|
||
|
|
||
|
client := &http.Client{
|
||
|
Transport: &http.Transport{
|
||
|
TLSClientConfig: &tls.Config{
|
||
|
RootCAs: pool,
|
||
|
Certificates: []tls.Certificate{cert},
|
||
|
},
|
||
|
},
|
||
|
}
|
||
|
|
||
|
resp, err := client.Get("https://localhost:8080")
|
||
|
if err != nil {
|
||
|
fmt.Println("get error:", err)
|
||
|
return
|
||
|
}
|
||
|
|
||
|
raw, err := io.ReadAll(resp.Body)
|
||
|
if err != nil {
|
||
|
fmt.Println("readall error:", err)
|
||
|
return
|
||
|
}
|
||
|
|
||
|
fmt.Println(">", string(raw))
|
||
|
}
|