Skip to content

Commit 632c670

Browse files
committed
fix TLS key preservation
1 parent a6fb980 commit 632c670

2 files changed

Lines changed: 18 additions & 6 deletions

File tree

main.go

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -614,6 +614,9 @@ func run() int {
614614
ttDemuxLogger := clog.NewCondLogger(log.New(logWriter, "TTDEMUX :",
615615
log.LstdFlags|log.Lshortfile),
616616
args.verbosity)
617+
tlsSessionLogger := clog.NewCondLogger(log.New(logWriter, "TLSSESS :",
618+
log.LstdFlags|log.Lshortfile),
619+
args.verbosity)
617620

618621
// setup auth provider
619622
authProvider, err := auth.NewAuth(args.auth, authLogger)
@@ -782,7 +785,7 @@ func run() int {
782785
}
783786

784787
if args.cert != "" {
785-
cfg, err1 := makeServerTLSConfig(args)
788+
cfg, err1 := makeServerTLSConfig(args, tlsSessionLogger)
786789
if err1 != nil {
787790
mainLogger.Critical("TLS config construction failed: %v", err1)
788791
return 3
@@ -844,7 +847,7 @@ func run() int {
844847
http.ListenAndServe(args.autocertHTTP, m.HTTPHandler(nil)))
845848
}()
846849
}
847-
cfg, err := makeServerTLSConfig(args)
850+
cfg, err := makeServerTLSConfig(args, tlsSessionLogger)
848851
if err != nil {
849852
mainLogger.Critical("TLS config construction failed: %v", err)
850853
return 3
@@ -1010,7 +1013,7 @@ func run() int {
10101013
return 2
10111014
}
10121015

1013-
func makeServerTLSConfig(args *CLIArgs) (*tls.Config, error) {
1016+
func makeServerTLSConfig(args *CLIArgs, logger *clog.CondLogger) (*tls.Config, error) {
10141017
cfg := &tls.Config{
10151018
MinVersion: uint16(args.minTLSVersion),
10161019
MaxVersion: uint16(args.maxTLSVersion),
@@ -1049,7 +1052,7 @@ func makeServerTLSConfig(args *CLIArgs) (*tls.Config, error) {
10491052
if len(args.tlsSessionKeys) > 0 {
10501053
cfg.SetSessionTicketKeys(args.tlsSessionKeys)
10511054
if args.tlsSameSessionKey {
1052-
cfg = tlsutil.PreserveSessionKeys(cfg, args.tlsSessionKeys)
1055+
cfg = tlsutil.PreserveSessionKeys(cfg, args.tlsSessionKeys, logger)
10531056
}
10541057
}
10551058
return cfg, nil

tlsutil/preserve.go

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@ import (
55
"crypto/tls"
66
"errors"
77
"net"
8+
9+
clog "github.com/SenseUnit/dumbproxy/log"
810
)
911

1012
type preservedKeyKey struct{}
@@ -62,11 +64,12 @@ func NonDefaultKeyUsedFromContext(ctx context.Context) bool {
6264
return WasNonDefaultKeyUsed(conn)
6365
}
6466

65-
func PreserveSessionKeys(cfg *tls.Config, keys [][32]byte) *tls.Config {
67+
func PreserveSessionKeys(cfg *tls.Config, keys [][32]byte, logger *clog.CondLogger) *tls.Config {
6668
if len(keys) < 2 {
6769
// there's just one key defined, nothing to do
6870
return cfg
6971
}
72+
logger.Debug("TLS session key preservation is now active.")
7073
forkConfig := func(chi *tls.ClientHelloInfo) (*tls.Config, error) {
7174
return cfg.Clone(), nil
7275
}
@@ -87,13 +90,16 @@ func PreserveSessionKeys(cfg *tls.Config, keys [][32]byte) *tls.Config {
8790
skCfg := cfg.Clone()
8891
skCfg.SessionTicketKey = [32]byte{}
8992
for ki, key := range keys {
93+
logger.Debug("trying session key %x (#%d)", key, ki)
9094
skCfg.SetSessionTicketKeys([][32]byte{key})
9195
ss, err := skCfg.DecryptTicket(identity, cs)
9296
if err != nil {
97+
logger.Error("got tls session ticket decrypt error: %v", err)
9398
return nil, err
9499
}
95100
if ss != nil {
96101
// key match
102+
logger.Debug("matched key %x for remote %s", key, chi.Conn.RemoteAddr())
97103
saveConnKey(conn, key)
98104
setNonDefaultKeyUsed(conn, ki > 0)
99105
return ss, nil
@@ -108,9 +114,12 @@ func PreserveSessionKeys(cfg *tls.Config, keys [][32]byte) *tls.Config {
108114
// is there previous key? if so, use it
109115
if k, ok := getConnKey(conn); ok {
110116
key = k
117+
logger.Debug("sending new ticket with reused key %x to remote %s", key, chi.Conn.RemoteAddr())
118+
} else {
119+
logger.Debug("sending new ticket with DEFAULT key %x to remote %s", key, chi.Conn.RemoteAddr())
111120
}
112121
skCfg.SetSessionTicketKeys([][32]byte{key})
113-
return cfg.EncryptTicket(cs, ss)
122+
return skCfg.EncryptTicket(cs, ss)
114123
}
115124
return cfg, nil
116125
}

0 commit comments

Comments
 (0)