refactor(netx): use netxlite to build TLSDialer (#790)
This diff modifies netx to use netxlite to build the TLSDialer. Building the TLSDialer entails building a TLSHandshaker. While there, hide netxlite names we don't want to be public and change netx tests to test for functionality. To this end, refactor filtering to provide an easier to use TLS server. We don't need the complexity of proxying rather we need to provoke specific errors. Part of https://github.com/ooni/probe/issues/2121
This commit is contained in:
parent
ae24ba644c
commit
e9ed733f07
9 changed files with 354 additions and 681 deletions
|
|
@ -64,8 +64,6 @@ type Config struct {
|
|||
TLSSaver *tracex.Saver // default: not saving TLS
|
||||
}
|
||||
|
||||
var defaultCertPool *x509.CertPool = netxlite.NewDefaultCertPool()
|
||||
|
||||
// NewResolver creates a new resolver from the specified config
|
||||
func NewResolver(config Config) model.Resolver {
|
||||
if config.BaseResolver == nil {
|
||||
|
|
@ -132,25 +130,16 @@ func NewTLSDialer(config Config) model.TLSDialer {
|
|||
if config.Dialer == nil {
|
||||
config.Dialer = NewDialer(config)
|
||||
}
|
||||
var h model.TLSHandshaker = &netxlite.TLSHandshakerConfigurable{}
|
||||
h = &netxlite.ErrorWrapperTLSHandshaker{TLSHandshaker: h}
|
||||
if config.Logger != nil {
|
||||
h = &netxlite.TLSHandshakerLogger{DebugLogger: config.Logger, TLSHandshaker: h}
|
||||
}
|
||||
h = config.TLSSaver.WrapTLSHandshaker(h) // behaves with nil TLSSaver
|
||||
if config.TLSConfig == nil {
|
||||
config.TLSConfig = &tls.Config{NextProtos: []string{"h2", "http/1.1"}}
|
||||
}
|
||||
if config.CertPool == nil {
|
||||
config.CertPool = defaultCertPool
|
||||
}
|
||||
config.TLSConfig.RootCAs = config.CertPool
|
||||
config.TLSConfig.InsecureSkipVerify = config.NoTLSVerify
|
||||
return &netxlite.TLSDialerLegacy{
|
||||
Config: config.TLSConfig,
|
||||
Dialer: config.Dialer,
|
||||
TLSHandshaker: h,
|
||||
}
|
||||
logger := model.ValidLoggerOrDefault(config.Logger)
|
||||
thx := netxlite.NewTLSHandshakerStdlib(logger)
|
||||
thx = config.TLSSaver.WrapTLSHandshaker(thx) // WAI when TLSSaver is nil
|
||||
tlsConfig := netxlite.ClonedTLSConfigOrNewEmptyConfig(config.TLSConfig)
|
||||
// TODO(bassosimone): we should not provide confusing options and
|
||||
// so we should drop CertPool and NoTLSVerify in favour of encouraging
|
||||
// the users of this library to always use a TLSConfig.
|
||||
tlsConfig.RootCAs = config.CertPool // netxlite uses default cert pool if this is nil
|
||||
tlsConfig.InsecureSkipVerify = config.NoTLSVerify
|
||||
return netxlite.NewTLSDialerWithConfig(config.Dialer, thx, tlsConfig)
|
||||
}
|
||||
|
||||
// NewHTTPTransport creates a new HTTPRoundTripper. You can further extend the returned
|
||||
|
|
|
|||
Loading…
Reference in a new issue