BUG/MEDIUM: ssl: does not look for all SNIs before chosing a certificate
authorWilliam Lallemand <wlallemand@haproxy.com>
Fri, 14 Aug 2020 12:43:35 +0000 (14:43 +0200)
committerWilly Tarreau <w@1wt.eu>
Tue, 22 Sep 2020 14:36:55 +0000 (16:36 +0200)
commit822e4c88e17d3ce4546e5ce4115c9db41624281d
treed90aa7f0575526a9b598e956b112267c1cecbaa3
parent4ac4fb89da4fa2e54d680db1f73e37c4bfc07a29
BUG/MEDIUM: ssl: does not look for all SNIs before chosing a certificate

In bug #810, the SNI are not matched correctly, indeed when trying to
match a certificate type in ssl_sock_switchctx_cbk() all SNIs were not
looked up correctly.

In the case you have in a crt-list:

wildcard.subdomain.domain.tld.pem.rsa *.subdomain.domain.tld record.subdomain.domain.tld
record.subdomain.domain.tld.pem.ecdsa record.subdomain.domain.tld another-record.subdomain.domain.tld

If the client only supports RSA and requests
"another-record.subdomain.domain.tld", HAProxy will find the single
ECDSA certificate and won't try to look up for a wildcard RSA
certificate.

This patch fixes the code so we look for all single and
wildcard before chosing the certificate type.

This bug was introduced by commit 3777e3a ("BUG/MINOR: ssl: certificate
choice can be unexpected with openssl >= 1.1.1").

It must be backported as far as 1.8 once it is heavily tested.

(cherry picked from commit 94bd319b264a64f73202a82bdd2d0bcf23722246)
Signed-off-by: Willy Tarreau <w@1wt.eu>
(cherry picked from commit fa434af0ac47304e6c060d864ba08202b4030ca9)
Signed-off-by: Willy Tarreau <w@1wt.eu>
src/ssl_sock.c