Gin域名服务器配置SSL证书后,浏览器可以正常访问域名,APIpost客户端这种不行

1. 运行环境#

go 1.22.2
gin v1.9.1

2. 问题描述?#

func (r *Route) ApiInit() {
gRoute := gin.Default()
gRoute.GET("/https_test", func(c *gin.Context) {
    fmt.Println(c.Request.Host)
    c.JSON(http.StatusOK, gin.H{
       "code":   http.StatusOK,
  "result": "测试成功",
  })
})

//启动服务
server := &http.Server{
    Addr:    ":80",
  Handler: gRoute,
}
// 定义服务器并配置SSL证书
httpsServer := &http.Server{
    Addr:    ":443", // HTTPS443端口
  Handler: gRoute,
  TLSConfig: &tls.Config{
       MinVersion:       tls.VersionTLS12, // 设置TLS的最小版本
  CurvePreferences: []tls.CurveID{tls.X25519, tls.CurveP256}, // 优先使用X25519
  CipherSuites: []uint16{
          tls.TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,
  tls.TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,
  tls.TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305,
  },
  Certificates: []tls.Certificate{
          // SSL证书和私钥
  mustLoadCertificate(), // 这是一个辅助函数,用于加载证书,见下文
  },
  },
}
g := errgroup.Group{}
g.Go(func() error {
    return server.ListenAndServe()
})
g.Go(func() error {
    return httpsServer.ListenAndServeTLS("", "")
})
if err := g.Wait(); err != nil && !errors.Is(err, http.ErrServerClosed) {
    log.Fatal(err)
}
}
func mustLoadCertificate() tls.Certificate {
    certFile := "./ssl/cert.pem" // 证书文件路径
  keyFile := "./ssl/cert.key" // 私钥文件路径
  // 加载证书和私钥
  cert, err := tls.LoadX509KeyPair(certFile, keyFile)
    if err != nil {
       log.Fatalf("Failed to load certificate and key: %v", err)
    }
    return cert
}

这样配置完域名和 SSL 证书,Microsoft Edge 和 Goolge 浏览器,Apipost,Apifox 网页版都能正常访问。
但 Apipost,Apifox 客户端就无法请求并报错 read ECONNRESET,
服务器日志 http: TLS handshake error :write: connection reset by peer
网页版 Apipost 不上传 CA 也能访问,客户端上传后并没有什么变化。不知道是否是 APIfox,APIpost 这种客户端所支持的的 tls 的密码套件和曲线和我配置的有不同导致的吗?

3. 您期望得到的结果?#

在客户端也能正常访问

4. 您实际得到的结果?#

Apipost,Apifox 客户端就无法请求并报错 read ECONNRESET,
服务器日志 http: TLS handshake error :write: connection reset by peer

gin
最佳答案

已解决 问题造成的根本原因是阿里国内服务器+域名没有公安备案,阿里会拦截访问服务 解决方法:域名备案

10个月前 评论
讨论数量: 4

浏览器访问加了 ssl 的网站,是可以由浏览器获取本地证书后进行数据交互的,APIpost 这类也是需要走 https 的请求的,如果没有设置本地证书的地方,那大概率不能请求 https 的网站

10个月前 评论
Mecha (楼主) 10个月前

已解决 问题造成的根本原因是阿里国内服务器+域名没有公安备案,阿里会拦截访问服务 解决方法:域名备案

10个月前 评论

https 通过 nginx 配就行了

10个月前 评论