]> git.ipfire.org Git - thirdparty/haproxy.git/commit
MINOR: ssl: compare server certificate names to the SNI on outgoing connections
authorWilly Tarreau <w@1wt.eu>
Wed, 5 Jul 2017 16:23:03 +0000 (18:23 +0200)
committerWilly Tarreau <w@1wt.eu>
Thu, 6 Jul 2017 13:15:28 +0000 (15:15 +0200)
commit2ab88675ecbf960a6f33ffe9c6a27f264150b201
tree3f675cc9473d042b604216794d31d2908d70dc1e
parent96fd926ccc61466caecf573aebad190dfd8b9a83
MINOR: ssl: compare server certificate names to the SNI on outgoing connections

When support for passing SNI to the server was added in 1.6-dev3, there
was no way to validate that the certificate presented by the server would
really match the name requested in the SNI, which is quite a problem as
it allows other (valid) certificates to be presented instead (when hitting
the wrong server or due to a man in the middle).

This patch adds the missing check against the value passed in the SNI.
The "verifyhost" value keeps precedence if set. If no SNI is used and
no verifyhost directive is specified, then the certificate name is not
checked (this is unchanged).

In order to extract the SNI value, it was necessary to make use of
SSL_SESSION_get0_hostname(), which appeared in openssl 1.1.0. This is
a trivial function which returns the value of s->tlsext_hostname, so
it was provided in the compat layer for older versions. After some
refinements from Emmanuel, it now builds with openssl 1.0.2, openssl
1.1.0 and boringssl. A test file was provided to ease testing all cases.

After some careful observation period it may make sense to backport
this to 1.7 and 1.6 as some users rightfully consider this limitation
as a bug.

Cc: Emmanuel Hocdet <manu@gandi.net>
Signed-off-by: Willy Tarreau <w@1wt.eu>
doc/configuration.txt
include/proto/openssl-compat.h
src/ssl_sock.c
tests/test-srv-verify.cfg [new file with mode: 0644]