| #REGTEST_TYPE=devel |
| |
| # This reg-test ensures that SSL related configuration specified in a |
| # default-server option are properly taken into account by the servers |
| # (frontend). It mainly focuses on the client certificate used by the frontend, |
| # that can either be defined in the server line itself, in the default-server |
| # line or in both. |
| # |
| # It was created following a bug raised in redmine (issue #3906) in which a |
| # server used an "empty" SSL context instead of the proper one. |
| # |
| |
| varnishtest "Test the 'set ssl cert' feature of the CLI" |
| feature cmd "$HAPROXY_PROGRAM -cc 'version_atleast(2.5-dev0)'" |
| feature cmd "$HAPROXY_PROGRAM -cc 'feature(OPENSSL)'" |
| feature ignore_unknown_macro |
| |
| server s1 -repeat 7 { |
| rxreq |
| txresp |
| } -start |
| |
| haproxy h1 -conf { |
| global |
| tune.ssl.default-dh-param 2048 |
| tune.ssl.capture-cipherlist-size 1 |
| stats socket "${tmpdir}/h1/stats" level admin |
| crt-base ${testdir} |
| ca-base ${testdir} |
| |
| defaults |
| mode http |
| option httplog |
| log stderr local0 debug err |
| option logasap |
| timeout connect 100ms |
| timeout client 1s |
| timeout server 1s |
| |
| listen clear-lst |
| bind "fd@${clearlst}" |
| use_backend first_be if { path /first } |
| use_backend second_be if { path /second } |
| use_backend third_be if { path /third } |
| use_backend fourth_be if { path /fourth } |
| use_backend fifth_be if { path /fifth } |
| |
| |
| backend first_be |
| default-server ssl crt client1.pem ca-file ca-auth.crt verify none |
| server s1 "${tmpdir}/ssl.sock" |
| |
| backend second_be |
| default-server ssl ca-file ca-auth.crt verify none |
| server s1 "${tmpdir}/ssl.sock" crt client1.pem |
| |
| backend third_be |
| default-server ssl crt client1.pem ca-file ca-auth.crt verify none |
| server s1 "${tmpdir}/ssl.sock" crt client2_expired.pem |
| |
| backend fourth_be |
| default-server ssl crt client1.pem verify none |
| server s1 "${tmpdir}/ssl.sock" ca-file ca-auth.crt |
| |
| backend fifth_be |
| balance roundrobin |
| default-server ssl crt client1.pem verify none |
| server s1 "${tmpdir}/ssl.sock" |
| server s2 "${tmpdir}/ssl.sock" crt client2_expired.pem |
| server s3 "${tmpdir}/ssl.sock" |
| |
| |
| listen ssl-lst |
| bind "${tmpdir}/ssl.sock" ssl crt ${testdir}/common.pem ca-file ca-auth.crt verify required crt-ignore-err all |
| |
| acl cert_expired ssl_c_verify 10 |
| acl cert_revoked ssl_c_verify 23 |
| acl cert_ok ssl_c_verify 0 |
| |
| http-response add-header X-SSL Ok if cert_ok |
| http-response add-header X-SSL Expired if cert_expired |
| http-response add-header X-SSL Revoked if cert_revoked |
| |
| server s1 ${s1_addr}:${s1_port} |
| } -start |
| |
| |
| |
| client c1 -connect ${h1_clearlst_sock} { |
| txreq -url "/first" |
| rxresp |
| expect resp.status == 200 |
| expect resp.http.x-ssl == "Ok" |
| } -run |
| |
| client c1 -connect ${h1_clearlst_sock} { |
| txreq -url "/second" |
| txreq |
| rxresp |
| expect resp.status == 200 |
| expect resp.http.x-ssl == "Ok" |
| } -run |
| |
| client c1 -connect ${h1_clearlst_sock} { |
| txreq -url "/third" |
| txreq |
| rxresp |
| expect resp.status == 200 |
| expect resp.http.x-ssl == "Expired" |
| } -run |
| |
| client c1 -connect ${h1_clearlst_sock} { |
| txreq -url "/fourth" |
| txreq |
| rxresp |
| expect resp.status == 200 |
| expect resp.http.x-ssl == "Ok" |
| } -run |
| |
| client c1 -connect ${h1_clearlst_sock} { |
| txreq -url "/fifth" |
| txreq |
| rxresp |
| expect resp.status == 200 |
| expect resp.http.x-ssl == "Ok" |
| } -run |
| |
| client c1 -connect ${h1_clearlst_sock} { |
| txreq -url "/fifth" |
| txreq |
| rxresp |
| expect resp.status == 200 |
| expect resp.http.x-ssl == "Expired" |
| } -run |
| |
| client c1 -connect ${h1_clearlst_sock} { |
| txreq -url "/fifth" |
| txreq |
| rxresp |
| expect resp.status == 200 |
| expect resp.http.x-ssl == "Ok" |
| } -run |