Skip to content

Commit 134b17d

Browse files
authored
fix: Resolve certificate validate failure Issues (1Panel-dev#9698)
1 parent 3af254c commit 134b17d

File tree

3 files changed

+35
-9
lines changed

3 files changed

+35
-9
lines changed

agent/middleware/certificate.go

Lines changed: 20 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,15 @@
11
package middleware
22

33
import (
4-
"errors"
54
"fmt"
5+
"net"
6+
"net/http"
67
"strings"
78

89
"github.com/1Panel-dev/1Panel/agent/app/api/v2/helper"
910
"github.com/1Panel-dev/1Panel/agent/global"
1011
"github.com/1Panel-dev/1Panel/agent/utils/cmd"
12+
"github.com/1Panel-dev/1Panel/agent/utils/xpack"
1113
"github.com/gin-gonic/gin"
1214
)
1315

@@ -17,13 +19,8 @@ func Certificate() gin.HandlerFunc {
1719
c.Next()
1820
return
1921
}
20-
if !c.Request.TLS.HandshakeComplete || len(c.Request.TLS.PeerCertificates) == 0 {
21-
helper.InternalServer(c, errors.New("no such tls peer certificates"))
22-
return
23-
}
24-
cert := c.Request.TLS.PeerCertificates[0]
25-
if cert.Subject.CommonName != "panel_client" {
26-
helper.InternalServer(c, fmt.Errorf("err certificate"))
22+
if !xpack.ValidateCertificate(c) {
23+
CloseDirectly(c)
2724
return
2825
}
2926
conn := c.Request.Header.Get("Connection")
@@ -40,3 +37,18 @@ func Certificate() gin.HandlerFunc {
4037
c.Next()
4138
}
4239
}
40+
41+
func CloseDirectly(c *gin.Context) {
42+
hijacker, ok := c.Writer.(http.Hijacker)
43+
if !ok {
44+
c.AbortWithStatus(http.StatusForbidden)
45+
return
46+
}
47+
conn, _, err := hijacker.Hijack()
48+
if err != nil {
49+
c.AbortWithStatus(http.StatusForbidden)
50+
return
51+
}
52+
_ = conn.(*net.TCPConn).SetLinger(0)
53+
conn.Close()
54+
}

agent/server/server.go

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package server
22

33
import (
44
"crypto/tls"
5+
"crypto/x509"
56
"fmt"
67
"net"
78
"net/http"
@@ -78,9 +79,17 @@ func Start() {
7879
fmt.Printf("failed to load X.509 key pair: %s\n", err)
7980
return
8081
}
82+
8183
server.TLSConfig = &tls.Config{
8284
Certificates: []tls.Certificate{tlsCert},
83-
ClientAuth: tls.RequireAnyClientCert,
85+
ClientAuth: tls.RequireAndVerifyClientCert,
86+
}
87+
caItem, _ := settingRepo.GetValueByKey("RootCrt")
88+
if len(caItem) != 0 {
89+
caCertPool := x509.NewCertPool()
90+
rootCrt, _ := encrypt.StringDecrypt(caItem)
91+
caCertPool.AppendCertsFromPEM([]byte(rootCrt))
92+
server.TLSConfig.ClientCAs = caCertPool
8493
}
8594
business.Init()
8695
global.LOG.Infof("listen at https://0.0.0.0:%s", global.CONF.Base.Port)

agent/utils/xpack/xpack.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ import (
1515
"github.com/1Panel-dev/1Panel/agent/buserr"
1616
"github.com/1Panel-dev/1Panel/agent/global"
1717
"github.com/1Panel-dev/1Panel/agent/utils/cmd"
18+
"github.com/gin-gonic/gin"
1819
)
1920

2021
func RemoveTamper(website string) {}
@@ -72,3 +73,7 @@ func LoadRequestTransport() *http.Transport {
7273
IdleConnTimeout: 15 * time.Second,
7374
}
7475
}
76+
77+
func ValidateCertificate(c *gin.Context) bool {
78+
return true
79+
}

0 commit comments

Comments
 (0)