Right now, the "best" way I'm aware of to serve both an RSA and an ECDSA
certificate on the same IP to different clients is to use req.ssl_ec_ext
<http://cbonte.github.io/haproxy-dconv/1.7/configuration.html#7.3.5-req.ssl_ec_ext>
to
determine if a set of supported elliptic curves was passed in the
ClientHello. Unfortunately, if clients disable ECDSA cipher suites (either
manually or through poor defaults), the EC extension block will still be
present, but the user will be unable to negotiate a handshake with an
ECDSA-using server. It would be nice to be able to direct users with no
ECDSA cipher suites to the RSA backend instead.

It would be nice to have a set of booleans available at the same level as
req.ssl_ec_ext for determining if various families of cipher suites are
present. I envision something like req.ssl_rsa_supported,
req.ssl_dsa_supported, and req.ssl_ecdsa_supported. I suppose we could also
just add a fetcher that exposes the entire client cipher-suite list as a
string and then use a regexp to determine if, e..g, the string "-ECDSA"
occurs in that list, but that seems somewhat failure-prone.

​Thoughts?​

-- 
James Brown
Engineer

Reply via email to