12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273 |
- package httpclient
- import (
- "crypto/tls"
- "crypto/x509"
- "embed"
- "errors"
- "fmt"
- "log"
- "net/http"
- )
- var (
- //go:embed keys
- keys embed.FS
- //
- tlsConfig *tls.Config
- //是否使用HTTPS
- UseHttps bool = true
- )
- // inic
- func init() {
- //tls
- clientCrt, err := keys.ReadFile("keys/client.crt")
- clientKey, err := keys.ReadFile("keys/client.key")
- fmt.Println("---------------", err)
- // 加载客户端证书和密钥
- clientCertPair, err := tls.X509KeyPair(clientCrt, clientKey)
- if err != nil {
- log.Fatalf("加载客户端证书和密钥失败: %v", err)
- }
- // 加载CA证书
- caCertPool, err := loadCA()
- if err != nil {
- log.Fatalf("加载CA证书失败: %v", err)
- }
- // 配置TLS配置
- tlsConfig = &tls.Config{
- Certificates: []tls.Certificate{clientCertPair},
- RootCAs: caCertPool,
- }
- }
- // 加载CA证书
- func loadCA() (*x509.CertPool, error) {
- caCert, err := keys.ReadFile("keys/ca.crt")
- if err != nil {
- return nil, err
- }
- caCertPool := x509.NewCertPool()
- if !caCertPool.AppendCertsFromPEM(caCert) {
- return nil, errors.New("无法添加CA证书到证书池")
- }
- return caCertPool, nil
- }
- func HttpClient() *http.Client {
- // 创建HTTP客户端
- var transport *http.Transport
- if UseHttps {
- transport = &http.Transport{
- TLSClientConfig: tlsConfig,
- }
- } else {
- transport = &http.Transport{}
- }
- return &http.Client{
- Transport: transport,
- }
- }
|