What did you do?
Per rfc8422#section-5.1.2,
For backwards compatibility purposes, the point format list extension MAY still be included and contain exactly one value: the uncompressed point format (0). RFC 4492 specified that if this extension is missing, it means that only the uncompressed point format is supported, so interoperability with implementations that support the uncompressed format should work with or without the extension
We are seeing TLS handshake failure (client and server failed to agree on ECDHE_ECDSA key exchange algorithem) when ec_point_formats is missing because we expect it to be listed in tls/handshake_server.go
// supportsECDHE returns whether ECDHE key exchanges can be used with this
// pre-TLS 1.3 client.
func supportsECDHE(c *Config, supportedCurves []CurveID, supportedPoints []uint8) bool {
...
supportsPointFormat := false
for _, pointFormat := range supportedPoints {
if pointFormat == pointFormatUncompressed {
supportsPointFormat = true
break
}
}
return supportsCurve && supportsPointFormat
}
What did you expect to see?
If ec_point_formats is missing in ClientHello, we will allow ECDHE key exchanges because it means that only the uncompressed point format is supported
What did you do?
Per rfc8422#section-5.1.2,
We are seeing TLS handshake failure (client and server failed to agree on ECDHE_ECDSA key exchange algorithem) when
ec_point_formatsis missing because we expect it to be listed in tls/handshake_server.goWhat did you expect to see?
If
ec_point_formatsis missing in ClientHello, we will allow ECDHE key exchanges becauseit means that only the uncompressed point format is supported