File tree Expand file tree Collapse file tree 3 files changed +35
-9
lines changed Expand file tree Collapse file tree 3 files changed +35
-9
lines changed Original file line number Diff line number Diff line change 11package middleware
22
33import (
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+ }
Original file line number Diff line number Diff line change @@ -2,6 +2,7 @@ package server
22
33import (
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 )
Original file line number Diff line number Diff 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
2021func 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+ }
You can’t perform that action at this time.
0 commit comments