httpclient.go 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. package httpclient
  2. import (
  3. "crypto/tls"
  4. "crypto/x509"
  5. "embed"
  6. "errors"
  7. "fmt"
  8. "log"
  9. "net/http"
  10. )
  11. var (
  12. //go:embed keys
  13. keys embed.FS
  14. //
  15. tlsConfig *tls.Config
  16. //是否使用HTTPS
  17. UseHttps bool = true
  18. )
  19. // inic
  20. func init() {
  21. //tls
  22. clientCrt, err := keys.ReadFile("keys/client.crt")
  23. clientKey, err := keys.ReadFile("keys/client.key")
  24. fmt.Println("---------------", err)
  25. // 加载客户端证书和密钥
  26. clientCertPair, err := tls.X509KeyPair(clientCrt, clientKey)
  27. if err != nil {
  28. log.Fatalf("加载客户端证书和密钥失败: %v", err)
  29. }
  30. // 加载CA证书
  31. caCertPool, err := loadCA()
  32. if err != nil {
  33. log.Fatalf("加载CA证书失败: %v", err)
  34. }
  35. // 配置TLS配置
  36. tlsConfig = &tls.Config{
  37. Certificates: []tls.Certificate{clientCertPair},
  38. RootCAs: caCertPool,
  39. }
  40. }
  41. // 加载CA证书
  42. func loadCA() (*x509.CertPool, error) {
  43. caCert, err := keys.ReadFile("keys/ca.crt")
  44. if err != nil {
  45. return nil, err
  46. }
  47. caCertPool := x509.NewCertPool()
  48. if !caCertPool.AppendCertsFromPEM(caCert) {
  49. return nil, errors.New("无法添加CA证书到证书池")
  50. }
  51. return caCertPool, nil
  52. }
  53. func HttpClient() *http.Client {
  54. // 创建HTTP客户端
  55. var transport *http.Transport
  56. if UseHttps {
  57. transport = &http.Transport{
  58. TLSClientConfig: tlsConfig,
  59. }
  60. } else {
  61. transport = &http.Transport{}
  62. }
  63. return &http.Client{
  64. Transport: transport,
  65. }
  66. }