Quellcode durchsuchen

Remove certificate server

tags/1.0^2
9seconds vor 6 Jahren
Ursprung
Commit
5d3824704c
6 geänderte Dateien mit 8 neuen und 152 gelöschten Zeilen
  1. 0
    1
      cli/proxy.go
  2. 0
    91
      faketls/certificate_server.go
  3. 1
    7
      faketls/client_protocol.go
  4. 0
    50
      faketls/init.go
  5. 2
    2
      stats/stats_statsd.go
  6. 5
    1
      tlstypes/server_hello.go

+ 0
- 1
cli/proxy.go Datei anzeigen

@@ -76,7 +76,6 @@ func Proxy() error { // nolint: funlen
76 76
 	antireplay.Init()
77 77
 	telegram.Init()
78 78
 	hub.Init(ctx)
79
-	faketls.Init(ctx)
80 79
 
81 80
 	proxyListener, err := net.Listen("tcp", config.C.Bind.String())
82 81
 	if err != nil {

+ 0
- 91
faketls/certificate_server.go Datei anzeigen

@@ -1,91 +0,0 @@
1
-package faketls
2
-
3
-import (
4
-	"bytes"
5
-	"container/ring"
6
-	"context"
7
-	"crypto/tls"
8
-	"errors"
9
-	"fmt"
10
-	"net"
11
-	"strconv"
12
-	"time"
13
-
14
-	"go.uber.org/zap"
15
-
16
-	"mtg/config"
17
-)
18
-
19
-type connectionServer struct {
20
-	nextWriteItem *ring.Ring
21
-	nextReadItem  *ring.Ring
22
-
23
-	ctx        context.Context
24
-	channelGet chan chan<- []byte
25
-}
26
-
27
-func (c *connectionServer) get() ([]byte, error) {
28
-	resp := make(chan []byte)
29
-	select {
30
-	case <-c.ctx.Done():
31
-		return nil, errors.New("context closed")
32
-	case c.channelGet <- resp:
33
-		return <-resp, nil
34
-	}
35
-}
36
-
37
-func (c *connectionServer) fetch() ([]byte, error) {
38
-	addr := net.JoinHostPort(config.C.CloakHost, strconv.Itoa(config.C.CloakPort))
39
-	conn, err := tls.Dial("tcp", addr, &tls.Config{InsecureSkipVerify: true}) // nolint: gosec
40
-
41
-	if err != nil {
42
-		return nil, fmt.Errorf("cannot connect to the masked host: %w", err)
43
-	}
44
-
45
-	defer conn.Close()
46
-
47
-	if err = conn.Handshake(); err != nil {
48
-		return nil, fmt.Errorf("cannot perform tls handshake: %w", err)
49
-	}
50
-
51
-	certificates := conn.ConnectionState().PeerCertificates
52
-	if len(certificates) == 0 {
53
-		return nil, errors.New("no certificates is found")
54
-	}
55
-
56
-	var buf bytes.Buffer
57
-
58
-	for _, v := range certificates {
59
-		buf.Write(v.Raw)
60
-	}
61
-
62
-	return buf.Bytes(), nil
63
-}
64
-
65
-func (c *connectionServer) run(tickEvery time.Duration) {
66
-	logger := zap.S().Named("tls-connection-server")
67
-
68
-	ticker := time.NewTicker(tickEvery)
69
-	defer ticker.Stop()
70
-
71
-	for {
72
-		select {
73
-		case <-c.ctx.Done():
74
-			return
75
-		case resp := <-c.channelGet:
76
-			resp <- c.nextReadItem.Value.([]byte)
77
-			close(resp)
78
-
79
-			c.nextReadItem = c.nextReadItem.Next()
80
-		case <-ticker.C:
81
-			cert, err := c.fetch()
82
-			switch err {
83
-			case nil:
84
-				c.nextWriteItem.Value = cert
85
-				c.nextWriteItem = c.nextWriteItem.Next()
86
-			default:
87
-				logger.Warnw("cannot fetch certificates", "error", err)
88
-			}
89
-		}
90
-	}
91
-}

+ 1
- 7
faketls/client_protocol.go Datei anzeigen

@@ -90,14 +90,8 @@ func (c *ClientProtocol) tlsHandshake(conn io.ReadWriter) error {
90 90
 	}
91 91
 
92 92
 	antireplay.Cache.AddTLS(clientHello.Random[:])
93
-
94
-	hostCert, err := connectionServerInstance.get()
95
-	if err != nil {
96
-		return fmt.Errorf("cannot get host certificate: %w", err)
97
-	}
98
-
99 93
 	serverHello := tlstypes.NewServerHello(clientHello)
100
-	serverHelloPacket := serverHello.WelcomePacket(hostCert)
94
+	serverHelloPacket := serverHello.WelcomePacket()
101 95
 
102 96
 	if _, err := conn.Write(serverHelloPacket); err != nil {
103 97
 		return fmt.Errorf("cannot send welcome packet: %w", err)

+ 0
- 50
faketls/init.go Datei anzeigen

@@ -1,50 +0,0 @@
1
-package faketls
2
-
3
-import (
4
-	"container/ring"
5
-	"context"
6
-	"sync"
7
-	"time"
8
-
9
-	"mtg/config"
10
-)
11
-
12
-var (
13
-	connectionServerInstance connectionServer
14
-	connectionServerInitOnce sync.Once
15
-)
16
-
17
-const (
18
-	connectionServerKeepCertificates = 5
19
-	connectionServerUpdateEvery      = 10 * time.Minute
20
-)
21
-
22
-func Init(ctx context.Context) {
23
-	connectionServerInitOnce.Do(func() {
24
-		if config.C.CloakHost == "" {
25
-			return
26
-		}
27
-
28
-		connectionServerInstance = connectionServer{
29
-			channelGet: make(chan chan<- []byte),
30
-			ctx:        ctx,
31
-		}
32
-
33
-		cert, err := connectionServerInstance.fetch()
34
-		if err != nil {
35
-			panic(err)
36
-		}
37
-
38
-		r := ring.New(connectionServerKeepCertificates)
39
-
40
-		for i := 0; i < connectionServerKeepCertificates; i++ {
41
-			r.Value = cert
42
-			r = r.Next()
43
-		}
44
-
45
-		connectionServerInstance.nextWriteItem = r
46
-		connectionServerInstance.nextReadItem = r
47
-
48
-		go connectionServerInstance.run(connectionServerUpdateEvery)
49
-	})
50
-}

+ 2
- 2
stats/stats_statsd.go Datei anzeigen

@@ -57,7 +57,7 @@ type statsStatsdLogger struct {
57 57
 	log *zap.SugaredLogger
58 58
 }
59 59
 
60
-func (s *statsStatsdLogger) Printf(msg string, args ...interface{}) {
60
+func (s statsStatsdLogger) Printf(msg string, args ...interface{}) {
61 61
 	s.log.Debugw(fmt.Sprintf(msg, args...))
62 62
 }
63 63
 
@@ -177,7 +177,7 @@ func (s *statsStatsd) initGauge(metric, key string, tags []statsd.Tag) {
177 177
 
178 178
 func newStatsStatsd() Interface {
179 179
 	prefix := strings.TrimSuffix(config.C.StatsNamespace, ".") + "."
180
-	logger := &statsStatsdLogger{
180
+	logger := statsStatsdLogger{
181 181
 		log: zap.S().Named("stats").Named("statsd"),
182 182
 	}
183 183
 

+ 5
- 1
tlstypes/server_hello.go Datei anzeigen

@@ -6,6 +6,7 @@ import (
6 6
 	"crypto/rand"
7 7
 	"crypto/sha256"
8 8
 	"io"
9
+	mrand "math/rand"
9 10
 
10 11
 	"golang.org/x/crypto/curve25519"
11 12
 
@@ -18,7 +19,7 @@ type ServerHello struct {
18 19
 	clientHello *ClientHello
19 20
 }
20 21
 
21
-func (s ServerHello) WelcomePacket(hostCert []byte) []byte {
22
+func (s ServerHello) WelcomePacket() []byte {
22 23
 	s.Random = [32]byte{}
23 24
 	rec := Record{
24 25
 		Type:    RecordTypeHandshake,
@@ -34,6 +35,9 @@ func (s ServerHello) WelcomePacket(hostCert []byte) []byte {
34 35
 	}
35 36
 	buf.Write(recChangeCipher.Bytes())
36 37
 
38
+	hostCert := make([]byte, 1024+mrand.Intn(3092))
39
+	rand.Read(hostCert) // nolint: errcheck
40
+
37 41
 	recData := Record{
38 42
 		Type:    RecordTypeApplicationData,
39 43
 		Version: Version12,

Laden…
Abbrechen
Speichern