Skip to content

Commit

Permalink
Merge pull request #707 from rod-hynes/master
Browse files Browse the repository at this point in the history
Fix to avoid incompatible randomized DTLS ClientHello
  • Loading branch information
rod-hynes authored Nov 12, 2024
2 parents 052813c + eabb3d0 commit 39b3234
Show file tree
Hide file tree
Showing 4 changed files with 56 additions and 2 deletions.
2 changes: 1 addition & 1 deletion psiphon/common/inproxy/brokerClient.go
Original file line number Diff line number Diff line change
Expand Up @@ -75,7 +75,7 @@ type BrokerClient struct {
func NewBrokerClient(coordinator BrokerDialCoordinator) (*BrokerClient, error) {

// A client is expected to use an ephemeral key, and can return a
// zero-value private key. Each proxy should use a peristent key, as the
// zero-value private key. Each proxy should use a persistent key, as the
// corresponding public key is the proxy ID, which is used to credit the
// proxy for its service.

Expand Down
2 changes: 1 addition & 1 deletion psiphon/common/inproxy/proxy.go
Original file line number Diff line number Diff line change
Expand Up @@ -428,7 +428,7 @@ func (p *Proxy) proxyClients(
p.config.Logger.WithTraceFields(
common.LogFields{
"error": errMsg,
"delay": delay,
"delay": delay.String(),
"jitter": jitter,
}).Error("proxy client failed")
logErrorsCount -= 1
Expand Down
27 changes: 27 additions & 0 deletions replace/dtls/flight1handler.go
Original file line number Diff line number Diff line change
Expand Up @@ -160,6 +160,33 @@ func flight1Generate(ctx context.Context, c flightConn, state *State, _ *handsha
})
cipherSuites = cipherSuites[:cut(len(cipherSuites))]

// At least one ECC cipher suite needs to be retained for compatibilty
// with the server's ECC certificate. Select from the ECC cipher suites
// currently returned by defaultCipherSuites.

eccCipherSuites := []uint16{
uint16(TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256),
uint16(TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA),
uint16(TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384),
}
hasECC := false
checkECCLoop:
for _, cipherSuite := range cipherSuites {
for _, eccCipherSuite := range eccCipherSuites {
if cipherSuite == eccCipherSuite {
hasECC = true
break checkECCLoop
}
}
}
if !hasECC {
eccCipherSuite := eccCipherSuites[PRNG.Intn(len(eccCipherSuites))]
cipherSuites = append(cipherSuites, eccCipherSuite)
PRNG.Shuffle(len(cipherSuites), func(i, j int) {
cipherSuites[i], cipherSuites[j] = cipherSuites[j], cipherSuites[i]
})
}

for _, ext := range extensions {
switch e := ext.(type) {
case *extension.SupportedSignatureAlgorithms:
Expand Down
27 changes: 27 additions & 0 deletions vendor/github.com/pion/dtls/v2/flight1handler.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

0 comments on commit 39b3234

Please sign in to comment.