blob: 63013f0f5466fef80692fc318d76f18425d90326 [file] [log] [blame]
Remi Tricot-Le Breton3b0f3e02021-07-13 18:28:22 +02001#REGTEST_TYPE=devel
2
3# This reg-test ensures that SSL related configuration specified in a
4# default-server option are properly taken into account by the servers
5# (frontend). It mainly focuses on the client certificate used by the frontend,
6# that can either be defined in the server line itself, in the default-server
7# line or in both.
8#
9# It was created following a bug raised in redmine (issue #3906) in which a
10# server used an "empty" SSL context instead of the proper one.
11#
12
13varnishtest "Test the 'set ssl cert' feature of the CLI"
14feature cmd "$HAPROXY_PROGRAM -cc 'version_atleast(2.5-dev0)'"
15feature cmd "$HAPROXY_PROGRAM -cc 'feature(OPENSSL)'"
16feature ignore_unknown_macro
17
William Lallemand6338b7d2021-12-28 18:47:17 +010018server s1 -repeat 10 {
Remi Tricot-Le Breton3b0f3e02021-07-13 18:28:22 +020019 rxreq
20 txresp
21} -start
22
23haproxy h1 -conf {
24 global
25 tune.ssl.default-dh-param 2048
26 tune.ssl.capture-cipherlist-size 1
27 stats socket "${tmpdir}/h1/stats" level admin
28 crt-base ${testdir}
29 ca-base ${testdir}
30
31 defaults
32 mode http
33 option httplog
34 log stderr local0 debug err
35 option logasap
36 timeout connect 100ms
37 timeout client 1s
38 timeout server 1s
39
40 listen clear-lst
41 bind "fd@${clearlst}"
42 use_backend first_be if { path /first }
43 use_backend second_be if { path /second }
44 use_backend third_be if { path /third }
45 use_backend fourth_be if { path /fourth }
46 use_backend fifth_be if { path /fifth }
47
48
49 backend first_be
50 default-server ssl crt client1.pem ca-file ca-auth.crt verify none
51 server s1 "${tmpdir}/ssl.sock"
52
53 backend second_be
54 default-server ssl ca-file ca-auth.crt verify none
55 server s1 "${tmpdir}/ssl.sock" crt client1.pem
56
57 backend third_be
58 default-server ssl crt client1.pem ca-file ca-auth.crt verify none
William Lallemand6338b7d2021-12-28 18:47:17 +010059 server s1 "${tmpdir}/ssl.sock"
60 server s2 "${tmpdir}/ssl.sock" crt client2_expired.pem
61 server s3 "${tmpdir}/ssl.sock"
62 server s4 "${tmpdir}/ssl.sock"
Remi Tricot-Le Breton3b0f3e02021-07-13 18:28:22 +020063
64 backend fourth_be
65 default-server ssl crt client1.pem verify none
66 server s1 "${tmpdir}/ssl.sock" ca-file ca-auth.crt
67
68 backend fifth_be
69 balance roundrobin
70 default-server ssl crt client1.pem verify none
71 server s1 "${tmpdir}/ssl.sock"
72 server s2 "${tmpdir}/ssl.sock" crt client2_expired.pem
73 server s3 "${tmpdir}/ssl.sock"
74
75
76 listen ssl-lst
77 bind "${tmpdir}/ssl.sock" ssl crt ${testdir}/common.pem ca-file ca-auth.crt verify required crt-ignore-err all
78
79 acl cert_expired ssl_c_verify 10
80 acl cert_revoked ssl_c_verify 23
81 acl cert_ok ssl_c_verify 0
82
83 http-response add-header X-SSL Ok if cert_ok
84 http-response add-header X-SSL Expired if cert_expired
85 http-response add-header X-SSL Revoked if cert_revoked
86
87 server s1 ${s1_addr}:${s1_port}
88} -start
89
90
91
92client c1 -connect ${h1_clearlst_sock} {
93 txreq -url "/first"
94 rxresp
95 expect resp.status == 200
96 expect resp.http.x-ssl == "Ok"
97} -run
98
99client c1 -connect ${h1_clearlst_sock} {
100 txreq -url "/second"
101 txreq
102 rxresp
103 expect resp.status == 200
104 expect resp.http.x-ssl == "Ok"
105} -run
106
107client c1 -connect ${h1_clearlst_sock} {
108 txreq -url "/third"
109 txreq
110 rxresp
111 expect resp.status == 200
William Lallemand6338b7d2021-12-28 18:47:17 +0100112 expect resp.http.x-ssl == "Ok"
113} -run
114
115client c1 -connect ${h1_clearlst_sock} {
116 txreq -url "/third"
117 txreq
118 rxresp
119 expect resp.status == 200
Remi Tricot-Le Breton3b0f3e02021-07-13 18:28:22 +0200120 expect resp.http.x-ssl == "Expired"
121} -run
122
William Lallemand6338b7d2021-12-28 18:47:17 +0100123client c1 -connect ${h1_clearlst_sock} -repeat 2 {
124 txreq -url "/third"
125 txreq
126 rxresp
127 expect resp.status == 200
128 expect resp.http.x-ssl == "Ok"
129} -run
130
Remi Tricot-Le Breton3b0f3e02021-07-13 18:28:22 +0200131client c1 -connect ${h1_clearlst_sock} {
132 txreq -url "/fourth"
133 txreq
134 rxresp
135 expect resp.status == 200
136 expect resp.http.x-ssl == "Ok"
137} -run
138
139client c1 -connect ${h1_clearlst_sock} {
140 txreq -url "/fifth"
141 txreq
142 rxresp
143 expect resp.status == 200
144 expect resp.http.x-ssl == "Ok"
145} -run
146
147client c1 -connect ${h1_clearlst_sock} {
148 txreq -url "/fifth"
149 txreq
150 rxresp
151 expect resp.status == 200
152 expect resp.http.x-ssl == "Expired"
153} -run
154
155client c1 -connect ${h1_clearlst_sock} {
156 txreq -url "/fifth"
157 txreq
158 rxresp
159 expect resp.status == 200
160 expect resp.http.x-ssl == "Ok"
161} -run