Skip to content

Commit

Permalink
REGTESTS: ssl: update the filters test for TLSv1.3 and sigalgs
Browse files Browse the repository at this point in the history
Signature algorithms allows us to select the right certificates when
using TLSv1.3. This patch update the ssl_crt-list_filters.vtc regtest to
do more precise testing with TLSv1.3 in addition to TLSv1.2.

This allow us to test correctly bug haproxy#2300.

It could be backported to 2.8 with the previous fix for certificate
selection.
  • Loading branch information
wlallemand committed Oct 26, 2023
1 parent 23093c7 commit 9496e7e
Showing 1 changed file with 67 additions and 7 deletions.
74 changes: 67 additions & 7 deletions reg-tests/ssl/ssl_crt-list_filters.vtc
Original file line number Diff line number Diff line change
@@ -1,14 +1,15 @@
#REGTEST_TYPE=bug
varnishtest "Test for the bug #810 and #818"
varnishtest "Test for ECDSA/RSA selection and crt-list filters"
feature cmd "$HAPROXY_PROGRAM -cc 'version_atleast(2.8)'"
feature cmd "$HAPROXY_PROGRAM -cc 'feature(OPENSSL) && ssllib_name_startswith(OpenSSL) && openssl_version_atleast(1.1.1)'"
# This test checks if the multiple certificate types works correctly with the
# SNI, and that the negative filters are correctly excluded

#REQUIRE_VERSION=2.2
#REQUIRE_OPTIONS=OPENSSL
#
# The selection is done with ciphers in TLSv1.2 and with the sigalgs in TLSv1.3
#
feature ignore_unknown_macro

server s1 -repeat 3 {
server s1 -repeat 6 {
rxreq
txresp
} -start
Expand All @@ -22,7 +23,7 @@ haproxy h1 -conf {
defaults
mode http
option httplog
retries 0
retries 0
log stderr local0 debug err
option logasap
timeout connect "${HAPROXY_TEST_TIMEOUT-5s}"
Expand All @@ -33,30 +34,89 @@ haproxy h1 -conf {
listen clear-lst
bind "fd@${clearlst}"
balance roundrobin

http-response add-header x-ssl-sha1 '%[ssl_s_sha1,hex]'
http-response add-header x-ssl-keyalg '%[ssl_s_key_alg]'

## TLSv1.2

server s1 "${tmpdir}/ssl.sock" ssl verify none sni str(another-record.bug810.domain.tld) ssl-min-ver TLSv1.2 ssl-max-ver TLSv1.2 ciphers "kRSA"
server s2 "${tmpdir}/ssl.sock" ssl verify none sni str(another-record.bug810.domain.tld) ssl-min-ver TLSv1.2 ssl-max-ver TLSv1.2 ciphers "aECDSA"

server s3 "${tmpdir}/ssl.sock" ssl verify none sni str(another-record.bug818.domain.tld) ssl-min-ver TLSv1.2 ssl-max-ver TLSv1.2 ciphers "kRSA"

## TLSv1.3

server s4 "${tmpdir}/ssl2.sock" ssl verify none sni str(another-record.bug810.domain.tld) ssl-min-ver TLSv1.3 sigalgs rsa_pss_rsae_sha384:rsa_pkcs1_sha256:ecdsa_secp384r1_sha384
server s5 "${tmpdir}/ssl2.sock" ssl verify none sni str(another-record.bug810.domain.tld) ssl-min-ver TLSv1.3 sigalgs rsa_pss_rsae_sha384:rsa_pkcs1_sha256
server s6 "${tmpdir}/ssl2.sock" ssl verify none sni str(another-record.bug810.domain.tld) ssl-min-ver TLSv1.3 sigalgs ecdsa_secp384r1_sha384

server s7 "${tmpdir}/ssl2.sock" ssl verify none sni str(another-record.bug818.domain.tld) ssl-min-ver TLSv1.3 sigalgs rsa_pss_rsae_sha384:rsa_pkcs1_sha256


listen ssl-lst
mode http
bind "${tmpdir}/ssl.sock" ssl strict-sni ssl-min-ver TLSv1.2 ssl-max-ver TLSv1.2 ciphers "kRSA:aECDSA" crt-list ${testdir}/filters.crt-list
bind "${tmpdir}/ssl.sock" ssl strict-sni ssl-min-ver TLSv1.2 ssl-max-ver TLSv1.2 crt-list ${testdir}/filters.crt-list
bind "${tmpdir}/ssl2.sock" ssl strict-sni ssl-min-ver TLSv1.3 ssl-max-ver TLSv1.3 crt-list ${testdir}/filters.crt-list

server s1 ${s1_addr}:${s1_port}
} -start

## TLSv1.2

# RSA + TLSv1.2 + another-record.bug810.domain.tld OK
client c1 -connect ${h1_clearlst_sock} {
txreq
rxresp
expect resp.status == 200
expect resp.http.x-ssl-keyalg == "rsaEncryption"
} -run

# ECDSA + TLSv1.2 + another-record.bug810.domain.tld OK
client c1 -connect ${h1_clearlst_sock} {
txreq
rxresp
expect resp.status == 200
expect resp.http.x-ssl-keyalg == "id-ecPublicKey"
} -run

# RSA + TLSv1.2 + another-record.bug818.domain.tld OK, domain not available in
# RSA because of the '!another-record.bug818.domain.tld' in the configuration.
client c1 -connect ${h1_clearlst_sock} {
txreq
rxresp
expect resp.status == 503
} -run

## TLSv1.3

# ECDSA/RSA sigalgs + TLSv1.3 + another-record.bug810.domain.tld should return the ECDSA cert
client c1 -connect ${h1_clearlst_sock} {
txreq
rxresp
expect resp.status == 200
expect resp.http.x-ssl-keyalg == "id-ecPublicKey"
} -run

# RSA sigalgs + TLSv1.3 + another-record.bug810.domain.tld should return the RSA cert
client c1 -connect ${h1_clearlst_sock} {
txreq
rxresp
expect resp.status == 200
expect resp.http.x-ssl-keyalg == "rsaEncryption"
} -run


# ECDSA sigalgs + TLSv1.3 + another-record.bug810.domain.tld should return the ECDSA cert
client c1 -connect ${h1_clearlst_sock} {
txreq
rxresp
expect resp.status == 200
expect resp.http.x-ssl-keyalg == "id-ecPublicKey"
} -run

# RSA sigalgs + TLSv1.3 + another-record.bug818.domain.tld must fail because
# this domain is not available with RSA
client c1 -connect ${h1_clearlst_sock} {
txreq
rxresp
Expand Down

0 comments on commit 9496e7e

Please sign in to comment.