Skip to content

crypto/tls: no support for SSLv2 Client Hello #46899

Description

@mrutter-amzn

What version of Go are you using (go version)?

$ go version
go version go1.16.5 linux/amd64

Does this issue reproduce with the latest release?

Yes

What did you do?

This issue is to revisit #3930

That issue was closed because there weren't any strong use-cases that were still making use of SSLv2 Client Hello for compatibility: #3930 (comment)

We have a use-case at our company that we are unable to work around without considerable effort. We have a reverse proxy that performs TLS termination that has been deployed for thousands of services in tens of thousands of environments. We have written a new implementation of that proxy in Go.

The majority of those environments are behind hardware load balancers operating in TCP mode. We don't perform TLS termination with those load balancers because they are difficult and slow to update. The load balancers have been configured to use "ssl-ping" for health checks, where the load balancer sends an HTTPS request to /ping. We use this instead of "tcp-ping" because that mode only verifies that the load balancer can establish a TCP connection.

For health checks the hardware load balancers send an SSLv2 Client Hello to then negotiate up to TLS 1.0 in order to send the HTTPS request to /ping. Because crypto/tls does not support the SSLv2 Client Hello, our proxy rejects the request signaling to the load balancer that it is not healthy.

Options we see:

  1. Support for SSLv2 Client Hello is added to the standard library. 🎉
  2. We maintain a patch I adapted from issue 3930. Maintaining a patch that adds functionality, without external or expert review, is not ideal. This is our current stance.
  3. We update all of the hardware load balancers to use a TLS Client Hello. The team that owns the hardware load balancers is unwilling.
  4. We migrate all of the health checks from "ssl-ping" to "tcp-ping". This would be an availability risk since the ability to properly connect to the proxy will not be exercised when determining health.

What did you expect to see?

Successful TLS 1.0 handshakes from the load balancer using SSLv2 Client Hello for health checks.

What did you see instead?

TLS handshake failures.

Metadata

Metadata

Assignees

No one assigned

    Labels

    FrozenDueToAgeNeedsDecisionFeedback is required from experts, contributors, and/or the community before a change can be made.

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions