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