From 664474b0580f8a1f1b58b14b7fe01ef49fbc6eb9 Mon Sep 17 00:00:00 2001 From: Marten Seemann Date: Sun, 5 Jan 2020 11:20:04 +0700 Subject: [PATCH 1/2] export a key log file from the client in the interop runner --- interop/client/main.go | 38 +++++++++++++++++++------------------- 1 file changed, 19 insertions(+), 19 deletions(-) diff --git a/interop/client/main.go b/interop/client/main.go index a98824a41..d6c0daaca 100644 --- a/interop/client/main.go +++ b/interop/client/main.go @@ -19,6 +19,8 @@ import ( var errUnsupported = errors.New("unsupported test case") +var tlsConf *tls.Config + func main() { logFile, err := os.Create("/logs/log.txt") if err != nil { @@ -28,6 +30,17 @@ func main() { defer logFile.Close() log.SetOutput(logFile) + keyLog, err := os.Create("/logs/keylogfile.txt") + if err != nil { + fmt.Printf("Could not create key log file: %s\n", err.Error()) + os.Exit(1) + } + defer keyLog.Close() + + tlsConf = &tls.Config{ + InsecureSkipVerify: true, + KeyLogWriter: keyLog, + } testcase := os.Getenv("TESTCASE") if err := runTestcase(testcase); err != nil { if err == errUnsupported { @@ -45,9 +58,7 @@ func runTestcase(testcase string) error { switch testcase { case "http3": - r := &http3.RoundTripper{ - TLSClientConfig: &tls.Config{InsecureSkipVerify: true}, - } + r := &http3.RoundTripper{TLSClientConfig: tlsConf} defer r.Close() return downloadFiles(r, urls) case "handshake", "transfer", "retry": @@ -59,9 +70,7 @@ func runTestcase(testcase string) error { return errUnsupported } - r := &http09.RoundTripper{ - TLSClientConfig: &tls.Config{InsecureSkipVerify: true}, - } + r := &http09.RoundTripper{TLSClientConfig: tlsConf} defer r.Close() return downloadFiles(r, urls) } @@ -85,27 +94,18 @@ func runResumptionTest(urls []string) error { if len(urls) < 2 { return errors.New("expected at least 2 URLs") } - csc := tls.NewLRUClientSessionCache(1) + + tlsConf.ClientSessionCache = tls.NewLRUClientSessionCache(1) // do the first transfer - r := &http09.RoundTripper{ - TLSClientConfig: &tls.Config{ - InsecureSkipVerify: true, - ClientSessionCache: csc, - }, - } + r := &http09.RoundTripper{TLSClientConfig: tlsConf} if err := downloadFiles(r, urls[:1]); err != nil { return err } r.Close() // reestablish the connection, using the session ticket that the server (hopefully provided) - r = &http09.RoundTripper{ - TLSClientConfig: &tls.Config{ - InsecureSkipVerify: true, - ClientSessionCache: csc, - }, - } + r = &http09.RoundTripper{TLSClientConfig: tlsConf} defer r.Close() return downloadFiles(r, urls[1:]) } From 2c4990405b0e44d2a83c61576353d603a7d4f5ce Mon Sep 17 00:00:00 2001 From: Marten Seemann Date: Sun, 5 Jan 2020 11:22:19 +0700 Subject: [PATCH 2/2] export a key log file from the server in the interop runner --- interop/server/main.go | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/interop/server/main.go b/interop/server/main.go index a4f77ca15..9b099f19c 100644 --- a/interop/server/main.go +++ b/interop/server/main.go @@ -1,6 +1,7 @@ package main import ( + "crypto/tls" "fmt" "log" "net" @@ -13,6 +14,8 @@ import ( "github.com/lucas-clemente/quic-go/interop/http09" ) +var tlsConf *tls.Config + func main() { logFile, err := os.Create("/logs/log.txt") if err != nil { @@ -22,12 +25,21 @@ func main() { defer logFile.Close() log.SetOutput(logFile) + keyLog, err := os.Create("/logs/keylogfile.txt") + if err != nil { + fmt.Printf("Could not create key log file: %s\n", err.Error()) + os.Exit(1) + } + defer keyLog.Close() + testcase := os.Getenv("TESTCASE") // a quic.Config that doesn't do a Retry quicConf := &quic.Config{ AcceptToken: func(_ net.Addr, _ *quic.Token) bool { return true }, } + tlsConf = testdata.GetTLSConfig() + tlsConf.KeyLogWriter = keyLog switch testcase { case "versionnegotiation", "handshake", "transfer", "resumption": @@ -53,7 +65,7 @@ func runHTTP09Server(quicConf *quic.Config) error { server := http09.Server{ Server: &http.Server{ Addr: "0.0.0.0:443", - TLSConfig: testdata.GetTLSConfig(), + TLSConfig: tlsConf, }, QuicConfig: quicConf, } @@ -65,7 +77,7 @@ func runHTTP3Server(quicConf *quic.Config) error { server := http3.Server{ Server: &http.Server{ Addr: "0.0.0.0:443", - TLSConfig: testdata.GetTLSConfig(), + TLSConfig: tlsConf, }, QuicConfig: quicConf, }