Browse Source

Minor fixes

世界 6 months ago
parent
commit
2a24b94b8d
2 changed files with 19 additions and 10 deletions
  1. 13 9
      common/tls/reality_server.go
  2. 6 1
      common/tls/std_server.go

+ 13 - 9
common/tls/reality_server.go

@@ -89,16 +89,20 @@ func NewRealityServer(ctx context.Context, logger log.Logger, options option.Inb
 	tlsConfig.MaxTimeDiff = time.Duration(options.Reality.MaxTimeDifference)
 
 	tlsConfig.ShortIds = make(map[[8]byte]bool)
-	for i, shortIDString := range options.Reality.ShortID {
-		var shortID [8]byte
-		decodedLen, err := hex.Decode(shortID[:], []byte(shortIDString))
-		if err != nil {
-			return nil, E.Cause(err, "decode short_id[", i, "]: ", shortIDString)
-		}
-		if decodedLen > 8 {
-			return nil, E.New("invalid short_id[", i, "]: ", shortIDString)
+	if len(options.Reality.ShortID) == 0 {
+		tlsConfig.ShortIds[[8]byte{0}] = true
+	} else {
+		for i, shortIDString := range options.Reality.ShortID {
+			var shortID [8]byte
+			decodedLen, err := hex.Decode(shortID[:], []byte(shortIDString))
+			if err != nil {
+				return nil, E.Cause(err, "decode short_id[", i, "]: ", shortIDString)
+			}
+			if decodedLen > 8 {
+				return nil, E.New("invalid short_id[", i, "]: ", shortIDString)
+			}
+			tlsConfig.ShortIds[shortID] = true
 		}
-		tlsConfig.ShortIds[shortID] = true
 	}
 
 	handshakeDialer, err := dialer.New(ctx, options.Reality.Handshake.DialerOptions)

+ 6 - 1
common/tls/std_server.go

@@ -6,6 +6,7 @@ import (
 	"net"
 	"os"
 	"strings"
+	"time"
 
 	"github.com/sagernet/fswatch"
 	"github.com/sagernet/sing-box/adapter"
@@ -221,8 +222,12 @@ func NewSTDServer(ctx context.Context, logger log.Logger, options option.Inbound
 			key = content
 		}
 		if certificate == nil && key == nil && options.Insecure {
+			timeFunc := ntp.TimeFuncFromContext(ctx)
+			if timeFunc == nil {
+				timeFunc = time.Now
+			}
 			tlsConfig.GetCertificate = func(info *tls.ClientHelloInfo) (*tls.Certificate, error) {
-				return GenerateKeyPair(nil, nil, ntp.TimeFuncFromContext(ctx), info.ServerName)
+				return GenerateKeyPair(nil, nil, timeFunc, info.ServerName)
 			}
 		} else {
 			if certificate == nil {