Skip to content

Commit

Permalink
Inlclude fix to set ALPN in NewClientForConfig
Browse files Browse the repository at this point in the history
  • Loading branch information
arjan-bal committed Jan 15, 2025
1 parent 6c1abda commit e179f32
Show file tree
Hide file tree
Showing 2 changed files with 326 additions and 100 deletions.
29 changes: 22 additions & 7 deletions experimental/credentials/tls.go
Original file line number Diff line number Diff line change
Expand Up @@ -139,25 +139,40 @@ var tls12ForbiddenCipherSuites = map[uint16]struct{}{
// NewTLSWithALPNDisabled uses c to construct a TransportCredentials based on
// TLS. ALPN verification is disabled.
func NewTLSWithALPNDisabled(c *tls.Config) credentials.TransportCredentials {
tc := &tlsCreds{cloneTLSConfig(c)}
tc.config.NextProtos = appendH2ToNextProtos(tc.config.NextProtos)
config := applyDefaults(c)
if config.GetConfigForClient != nil {
oldFn := config.GetConfigForClient
config.GetConfigForClient = func(hello *tls.ClientHelloInfo) (*tls.Config, error) {
cfgForClient, err := oldFn(hello)
if err != nil || cfgForClient == nil {
return cfgForClient, err
}
return applyDefaults(cfgForClient), nil
}
}
return &tlsCreds{config: config}
}

func applyDefaults(c *tls.Config) *tls.Config {
config := cloneTLSConfig(c)
config.NextProtos = appendH2ToNextProtos(config.NextProtos)
// If the user did not configure a MinVersion and did not configure a
// MaxVersion < 1.2, use MinVersion=1.2, which is required by
// https://datatracker.ietf.org/doc/html/rfc7540#section-9.2
if tc.config.MinVersion == 0 && (tc.config.MaxVersion == 0 || tc.config.MaxVersion >= tls.VersionTLS12) {
tc.config.MinVersion = tls.VersionTLS12
if config.MinVersion == 0 && (config.MaxVersion == 0 || config.MaxVersion >= tls.VersionTLS12) {
config.MinVersion = tls.VersionTLS12
}
// If the user did not configure CipherSuites, use all "secure" cipher
// suites reported by the TLS package, but remove some explicitly forbidden
// by https://datatracker.ietf.org/doc/html/rfc7540#appendix-A
if tc.config.CipherSuites == nil {
if config.CipherSuites == nil {
for _, cs := range tls.CipherSuites() {
if _, ok := tls12ForbiddenCipherSuites[cs.ID]; !ok {
tc.config.CipherSuites = append(tc.config.CipherSuites, cs.ID)
config.CipherSuites = append(config.CipherSuites, cs.ID)
}
}
}
return tc
return config
}

// NewClientTLSFromCertWithALPNDisabled constructs TLS credentials from the
Expand Down
Loading

0 comments on commit e179f32

Please sign in to comment.