aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorShelikhoo <xiaokangwang@outlook.com>2022-02-11 09:57:37 +0000
committerShelikhoo <xiaokangwang@outlook.com>2022-03-16 09:13:29 +0000
commitccfdcab8feb7857a3089f2a88bc2e1e6c52d5865 (patch)
tree87618d5f9265c7d3b7088424f75d8cb12eccb2b2
parent9af0ad119b8b0f129f015c5347fe5a3b03596ff0 (diff)
downloadsnowflake-ccfdcab8feb7857a3089f2a88bc2e1e6c52d5865.tar.gz
snowflake-ccfdcab8feb7857a3089f2a88bc2e1e6c52d5865.zip
Add uTLS remove SNI to snowflake client
-rw-r--r--client/lib/rendezvous.go6
-rw-r--r--client/lib/snowflake.go3
-rw-r--r--client/snowflake.go2
3 files changed, 8 insertions, 3 deletions
diff --git a/client/lib/rendezvous.go b/client/lib/rendezvous.go
index 4c7c6f9..7c27dfc 100644
--- a/client/lib/rendezvous.go
+++ b/client/lib/rendezvous.go
@@ -56,13 +56,13 @@ func createBrokerTransport() http.RoundTripper {
}
func NewBrokerChannel(broker, ampCache, front string, keepLocalAddresses bool) (*BrokerChannel, error) {
- return NewBrokerChannelWithUTlsClientID(broker, ampCache, front, keepLocalAddresses, "")
+ return NewBrokerChannelWithUTlsClientID(broker, ampCache, front, keepLocalAddresses, "", false)
}
// NewBrokerChannelWithUTlsClientID construct a new BrokerChannel, where:
// |broker| is the full URL of the facilitating program which assigns proxies
// to clients, and |front| is the option fronting domain.
-func NewBrokerChannelWithUTlsClientID(broker, ampCache, front string, keepLocalAddresses bool, utlsClientID string) (*BrokerChannel, error) {
+func NewBrokerChannelWithUTlsClientID(broker, ampCache, front string, keepLocalAddresses bool, utlsClientID string, removeSNI bool) (*BrokerChannel, error) {
log.Println("Rendezvous using Broker at:", broker)
if ampCache != "" {
log.Println("Through AMP cache at:", ampCache)
@@ -79,7 +79,7 @@ func NewBrokerChannelWithUTlsClientID(broker, ampCache, front string, keepLocalA
return nil, fmt.Errorf("unable to create broker channel: %v", err)
}
config := &utls.Config{}
- brokerTransport = utlsutil.NewUTLSHTTPRoundTripper(utlsClientHelloID, config, brokerTransport, false)
+ brokerTransport = utlsutil.NewUTLSHTTPRoundTripper(utlsClientHelloID, config, brokerTransport, removeSNI)
}
var rendezvous RendezvousMethod
diff --git a/client/lib/snowflake.go b/client/lib/snowflake.go
index 19442d8..510567e 100644
--- a/client/lib/snowflake.go
+++ b/client/lib/snowflake.go
@@ -100,6 +100,9 @@ type ClientConfig struct {
// UTlsClientID is the type of user application that snowflake should imitate.
// If an empty value is provided, it will use Go's default TLS implementation
UTlsClientID string
+ // UTlsRemoveSNI is the flag to control whether SNI should be removed from Client Hello
+ // when uTLS is used.
+ UTlsRemoveSNI bool
}
// NewSnowflakeClient creates a new Snowflake transport client that can spawn multiple
diff --git a/client/snowflake.go b/client/snowflake.go
index addedb9..a693ca6 100644
--- a/client/snowflake.go
+++ b/client/snowflake.go
@@ -127,6 +127,7 @@ func main() {
ampCacheURL := flag.String("ampcache", "", "URL of AMP cache to use as a proxy for signaling")
logFilename := flag.String("log", "", "name of log file")
utlsClientHelloID := flag.String("utls-imitate", "", "type of TLS client to imitate with utls")
+ utlsRemoveSNI := flag.Bool("utls-nosni", false, "remove SNI from client hello(ignored if uTLS is not used)")
logToStateDir := flag.Bool("log-to-state-dir", false, "resolve the log file relative to tor's pt state dir")
keepLocalAddresses := flag.Bool("keep-local-addresses", false, "keep local LAN address ICE candidates")
unsafeLogging := flag.Bool("unsafe-logging", false, "prevent logs from being scrubbed")
@@ -180,6 +181,7 @@ func main() {
KeepLocalAddresses: *keepLocalAddresses || *oldKeepLocalAddresses,
Max: *max,
UTlsClientID: *utlsClientHelloID,
+ UTlsRemoveSNI: *utlsRemoveSNI,
}
// Begin goptlib client process.