blob: 00425619951f809592a785f37b79ee446f8df94e [file] [log] [blame]
Manuel Pégourié-Gonnardeaadc502014-02-20 11:01:30 +01001#!/bin/sh
2
3# Test various options that are not covered by compat.sh
4#
5# Here the goal is not to cover every ciphersuite/version, but
6# rather specific options (max fragment length, truncated hmac, etc)
7# or procedures (session resumption from cache or ticket, renego, etc).
8#
9# Assumes all options are compiled in.
10
11PROGS_DIR='../programs/ssl'
12SRV_CMD="$PROGS_DIR/ssl_server2"
13CLI_CMD="$PROGS_DIR/ssl_client2"
14
15# Usage: run_test name srv_args cli_args cli_exit [option [...]]
16# Options: -s pattern pattern that must be present in server output
17# -c pattern pattern that must be present in client output
18# -S pattern pattern that must be absent in server output
19# -C pattern pattern that must be absent in client output
20run_test() {
21 echo -n "$1: "
22 shift
23
24 # run the commands
25 $SRV_CMD $1 > srv_out &
26 SRV_PID=$!
27 sleep 1
28 $CLI_CMD $2 > cli_out
29 CLI_EXIT=$?
Manuel Pégourié-Gonnardc55a5b72014-02-20 22:50:56 +010030 echo SERVERQUIT | openssl s_client -no_ticket >/dev/null 2>&1
Manuel Pégourié-Gonnardeaadc502014-02-20 11:01:30 +010031 wait $SRV_PID
32 shift 2
33
34 # check client exit code
Manuel Pégourié-Gonnard780d6712014-02-20 17:19:59 +010035 if [ \( "$1" = 0 -a "$CLI_EXIT" != 0 \) -o \
36 \( "$1" != 0 -a "$CLI_EXIT" = 0 \) ]
37 then
Manuel Pégourié-Gonnardeaadc502014-02-20 11:01:30 +010038 echo "FAIL - client exit"
39 return
40 fi
41 shift
42
43 # check options
44 while [ $# -gt 0 ]
45 do
46 case $1 in
47 "-s")
48 if grep "$2" srv_out >/dev/null; then :; else
49 echo "FAIL - -s $2"
50 return
51 fi
52 ;;
53
54 "-c")
55 if grep "$2" cli_out >/dev/null; then :; else
56 echo "FAIL - -c $2"
57 return
58 fi
59 ;;
60
61 "-S")
62 if grep "$2" srv_out >/dev/null; then
63 echo "FAIL - -S $2"
64 return
65 fi
66 ;;
67
68 "-C")
69 if grep "$2" cli_out >/dev/null; then
70 echo "FAIL - -C $2"
71 return
72 fi
73 ;;
74
75 *)
76 echo "Unkown test: $1" >&2
77 exit 1
78 esac
79 shift 2
80 done
81
82 # if we're here, everything is ok
83 echo "PASS"
84 rm -r srv_out cli_out
85}
86
87killall -q openssl ssl_server ssl_server2
88
Manuel Pégourié-Gonnard780d6712014-02-20 17:19:59 +010089# Tests for Truncated HMAC extension
90
91run_test "Truncated HMAC #0" \
92 "debug_level=5" \
93 "trunc_hmac=0 force_ciphersuite=TLS-RSA-WITH-AES-128-CBC-SHA" \
94 0 \
95 -s "dumping 'computed mac' (20 bytes)"
96
97run_test "Truncated HMAC #1" \
Manuel Pégourié-Gonnardeaadc502014-02-20 11:01:30 +010098 "debug_level=5" \
Manuel Pégourié-Gonnardf7c52012014-02-20 11:43:46 +010099 "trunc_hmac=1 force_ciphersuite=TLS-RSA-WITH-AES-128-CBC-SHA" \
Manuel Pégourié-Gonnardeaadc502014-02-20 11:01:30 +0100100 0 \
Manuel Pégourié-Gonnardf7c52012014-02-20 11:43:46 +0100101 -s "dumping 'computed mac' (10 bytes)"
102
Manuel Pégourié-Gonnard780d6712014-02-20 17:19:59 +0100103# Tests for Session Tickets
104
Manuel Pégourié-Gonnard4c883452014-02-20 21:32:41 +0100105run_test "Session resume using tickets #1" \
Manuel Pégourié-Gonnardf7c52012014-02-20 11:43:46 +0100106 "debug_level=4 tickets=1" \
Manuel Pégourié-Gonnarddbe1ee12014-02-21 09:18:13 +0100107 "debug_level=4 tickets=1 reconnect=1" \
Manuel Pégourié-Gonnardf7c52012014-02-20 11:43:46 +0100108 0 \
Manuel Pégourié-Gonnardc55a5b72014-02-20 22:50:56 +0100109 -c "client hello, adding session ticket extension" \
110 -s "found session ticket extension" \
111 -s "server hello, adding session ticket extension" \
112 -c "found session_ticket extension" \
113 -c "parse new session ticket" \
Manuel Pégourié-Gonnardf7c52012014-02-20 11:43:46 +0100114 -S "session successfully restored from cache" \
115 -s "session successfully restored from ticket" \
116 -s "a session has been resumed" \
117 -c "a session has been resumed"
118
Manuel Pégourié-Gonnard4c883452014-02-20 21:32:41 +0100119run_test "Session resume using tickets #2" \
120 "debug_level=4 tickets=1 cache_max=0" \
Manuel Pégourié-Gonnarddbe1ee12014-02-21 09:18:13 +0100121 "debug_level=4 tickets=1 reconnect=1" \
122 0 \
123 -c "client hello, adding session ticket extension" \
124 -s "found session ticket extension" \
125 -s "server hello, adding session ticket extension" \
126 -c "found session_ticket extension" \
127 -c "parse new session ticket" \
128 -S "session successfully restored from cache" \
129 -s "session successfully restored from ticket" \
130 -s "a session has been resumed" \
131 -c "a session has been resumed"
132
133run_test "Session resume using tickets #3" \
134 "debug_level=4 tickets=1 cache_max=0 ticket_timeout=1" \
135 "debug_level=4 tickets=1 reconnect=1 reco_delay=2" \
136 0 \
137 -c "client hello, adding session ticket extension" \
138 -s "found session ticket extension" \
139 -s "server hello, adding session ticket extension" \
140 -c "found session_ticket extension" \
141 -c "parse new session ticket" \
142 -S "session successfully restored from cache" \
143 -S "session successfully restored from ticket" \
144 -S "a session has been resumed" \
145 -C "a session has been resumed"
146
147run_test "Session resume using tickets #4" \
148 "debug_level=4 tickets=1 cache_max=0 ticket_timeout=2" \
149 "debug_level=4 tickets=1 reconnect=1 reco_delay=0" \
Manuel Pégourié-Gonnard4c883452014-02-20 21:32:41 +0100150 0 \
Manuel Pégourié-Gonnardc55a5b72014-02-20 22:50:56 +0100151 -c "client hello, adding session ticket extension" \
152 -s "found session ticket extension" \
153 -s "server hello, adding session ticket extension" \
154 -c "found session_ticket extension" \
155 -c "parse new session ticket" \
Manuel Pégourié-Gonnard4c883452014-02-20 21:32:41 +0100156 -S "session successfully restored from cache" \
157 -s "session successfully restored from ticket" \
158 -s "a session has been resumed" \
159 -c "a session has been resumed"
160
Manuel Pégourié-Gonnardc55a5b72014-02-20 22:50:56 +0100161# Tests for Session Resume based on session-ID and cache
Manuel Pégourié-Gonnard780d6712014-02-20 17:19:59 +0100162
Manuel Pégourié-Gonnardc55a5b72014-02-20 22:50:56 +0100163run_test "Session resume using cache #1 (tickets enabled on client)" \
Manuel Pégourié-Gonnardf7c52012014-02-20 11:43:46 +0100164 "debug_level=4 tickets=0" \
Manuel Pégourié-Gonnardc55a5b72014-02-20 22:50:56 +0100165 "debug_level=4 tickets=1 reconnect=1" \
Manuel Pégourié-Gonnardf7c52012014-02-20 11:43:46 +0100166 0 \
Manuel Pégourié-Gonnardc55a5b72014-02-20 22:50:56 +0100167 -c "client hello, adding session ticket extension" \
168 -s "found session ticket extension" \
169 -S "server hello, adding session ticket extension" \
170 -C "found session_ticket extension" \
171 -C "parse new session ticket" \
Manuel Pégourié-Gonnardf7c52012014-02-20 11:43:46 +0100172 -s "session successfully restored from cache" \
173 -S "session successfully restored from ticket" \
174 -s "a session has been resumed" \
175 -c "a session has been resumed"
176
Manuel Pégourié-Gonnardc55a5b72014-02-20 22:50:56 +0100177run_test "Session resume using cache #2 (tickets enabled on server)" \
Manuel Pégourié-Gonnardf7c52012014-02-20 11:43:46 +0100178 "debug_level=4 tickets=1" \
Manuel Pégourié-Gonnardc55a5b72014-02-20 22:50:56 +0100179 "debug_level=4 tickets=0 reconnect=1" \
Manuel Pégourié-Gonnardf7c52012014-02-20 11:43:46 +0100180 0 \
Manuel Pégourié-Gonnardc55a5b72014-02-20 22:50:56 +0100181 -C "client hello, adding session ticket extension" \
182 -S "found session ticket extension" \
183 -S "server hello, adding session ticket extension" \
184 -C "found session_ticket extension" \
185 -C "parse new session ticket" \
Manuel Pégourié-Gonnardf7c52012014-02-20 11:43:46 +0100186 -s "session successfully restored from cache" \
187 -S "session successfully restored from ticket" \
188 -s "a session has been resumed" \
189 -c "a session has been resumed"
Manuel Pégourié-Gonnardde143782014-02-20 14:50:42 +0100190
Manuel Pégourié-Gonnardc55a5b72014-02-20 22:50:56 +0100191run_test "Session resume using cache #3 (cache_max=0)" \
Manuel Pégourié-Gonnard4c883452014-02-20 21:32:41 +0100192 "debug_level=4 tickets=0 cache_max=0" \
Manuel Pégourié-Gonnardc55a5b72014-02-20 22:50:56 +0100193 "debug_level=4 tickets=0 reconnect=1" \
Manuel Pégourié-Gonnard4c883452014-02-20 21:32:41 +0100194 0 \
195 -S "session successfully restored from cache" \
196 -S "session successfully restored from ticket" \
Manuel Pégourié-Gonnardc55a5b72014-02-20 22:50:56 +0100197 -S "a session has been resumed" \
198 -C "a session has been resumed"
Manuel Pégourié-Gonnard4c883452014-02-20 21:32:41 +0100199
Manuel Pégourié-Gonnardc55a5b72014-02-20 22:50:56 +0100200run_test "Session resume using cache #4 (cache_max=1)" \
201 "debug_level=4 tickets=0 cache_max=1" \
202 "debug_level=4 tickets=0 reconnect=1" \
203 0 \
204 -s "session successfully restored from cache" \
205 -S "session successfully restored from ticket" \
206 -s "a session has been resumed" \
207 -c "a session has been resumed"
208
209run_test "Session resume using cache #5 (timemout > delay)" \
210 "debug_level=4 tickets=0 cache_timeout=1" \
211 "debug_level=4 tickets=0 reconnect=1 reco_delay=0" \
212 0 \
213 -s "session successfully restored from cache" \
214 -S "session successfully restored from ticket" \
215 -s "a session has been resumed" \
216 -c "a session has been resumed"
217
218run_test "Session resume using cache #6 (timeout < delay)" \
219 "debug_level=4 tickets=0 cache_timeout=1" \
220 "debug_level=4 tickets=0 reconnect=1 reco_delay=2" \
221 0 \
222 -S "session successfully restored from cache" \
223 -S "session successfully restored from ticket" \
224 -S "a session has been resumed" \
225 -C "a session has been resumed"
226
227run_test "Session resume using cache #7 (no timeout)" \
228 "debug_level=4 tickets=0 cache_timeout=0" \
229 "debug_level=4 tickets=0 reconnect=1 reco_delay=2" \
Manuel Pégourié-Gonnard4c883452014-02-20 21:32:41 +0100230 0 \
231 -s "session successfully restored from cache" \
232 -S "session successfully restored from ticket" \
233 -s "a session has been resumed" \
234 -c "a session has been resumed"
235
Manuel Pégourié-Gonnard780d6712014-02-20 17:19:59 +0100236# Tests for Max Fragment Length extension
237
Manuel Pégourié-Gonnardde143782014-02-20 14:50:42 +0100238run_test "Max fragment length #1" \
239 "debug_level=4" \
240 "debug_level=4" \
241 0 \
242 -C "client hello, adding max_fragment_length extension" \
243 -S "found max fragment length extension" \
244 -S "server hello, max_fragment_length extension" \
245 -C "found max_fragment_length extension"
246
247run_test "Max fragment length #2" \
248 "debug_level=4" \
249 "debug_level=4 max_frag_len=4096" \
250 0 \
251 -c "client hello, adding max_fragment_length extension" \
252 -s "found max fragment length extension" \
253 -s "server hello, max_fragment_length extension" \
254 -c "found max_fragment_length extension"
255
256run_test "Max fragment length #3" \
257 "debug_level=4 max_frag_len=4096" \
258 "debug_level=4" \
259 0 \
260 -C "client hello, adding max_fragment_length extension" \
261 -S "found max fragment length extension" \
262 -S "server hello, max_fragment_length extension" \
263 -C "found max_fragment_length extension"
Manuel Pégourié-Gonnard780d6712014-02-20 17:19:59 +0100264
265# Tests for renegotiation
266
267run_test "Renegotiation #0 (none)" \
268 "debug_level=4" \
269 "debug_level=4" \
270 0 \
271 -C "client hello, adding renegotiation extension" \
272 -s "received TLS_EMPTY_RENEGOTIATION_INFO" \
273 -S "found renegotiation extension" \
274 -s "server hello, secure renegotiation extension" \
275 -c "found renegotiation extension" \
276 -C "renegotiate" \
277 -S "renegotiate" \
278 -S "write hello request"
279
280run_test "Renegotiation #1 (enabled, client-initiated)" \
281 "debug_level=4" \
282 "debug_level=4 renegotiate=1" \
283 0 \
284 -c "client hello, adding renegotiation extension" \
285 -s "received TLS_EMPTY_RENEGOTIATION_INFO" \
286 -s "found renegotiation extension" \
287 -s "server hello, secure renegotiation extension" \
288 -c "found renegotiation extension" \
289 -c "renegotiate" \
290 -s "renegotiate" \
291 -S "write hello request"
292
293run_test "Renegotiation #2 (enabled, server-initiated)" \
294 "debug_level=4 renegotiate=1" \
295 "debug_level=4" \
296 0 \
297 -c "client hello, adding renegotiation extension" \
298 -s "received TLS_EMPTY_RENEGOTIATION_INFO" \
299 -s "found renegotiation extension" \
300 -s "server hello, secure renegotiation extension" \
301 -c "found renegotiation extension" \
302 -c "renegotiate" \
303 -s "renegotiate" \
304 -s "write hello request"
305
306run_test "Renegotiation #3 (enabled, double)" \
307 "debug_level=4 renegotiate=1" \
308 "debug_level=4 renegotiate=1" \
309 0 \
310 -c "client hello, adding renegotiation extension" \
311 -s "received TLS_EMPTY_RENEGOTIATION_INFO" \
312 -s "found renegotiation extension" \
313 -s "server hello, secure renegotiation extension" \
314 -c "found renegotiation extension" \
315 -c "renegotiate" \
316 -s "renegotiate" \
317 -s "write hello request"
318
319run_test "Renegotiation #4 (client-initiated, server-rejected)" \
320 "debug_level=4 renegotiation=0" \
321 "debug_level=4 renegotiate=1" \
322 1 \
323 -c "client hello, adding renegotiation extension" \
324 -s "received TLS_EMPTY_RENEGOTIATION_INFO" \
325 -S "found renegotiation extension" \
326 -s "server hello, secure renegotiation extension" \
327 -c "found renegotiation extension" \
328 -c "renegotiate" \
329 -S "renegotiate" \
330 -S "write hello request"
331
332run_test "Renegotiation #5 (server-initiated, client-rejected)" \
333 "debug_level=4 renegotiate=1" \
334 "debug_level=4 renegotiation=0" \
335 0 \
336 -C "client hello, adding renegotiation extension" \
337 -s "received TLS_EMPTY_RENEGOTIATION_INFO" \
338 -S "found renegotiation extension" \
339 -s "server hello, secure renegotiation extension" \
340 -c "found renegotiation extension" \
341 -C "renegotiate" \
342 -S "renegotiate" \
343 -s "write hello request" \
344 -s "SSL - An unexpected message was received from our peer" \
345 -s "failed"