11% %
2- % % %CopyrightBegin%
3- % %
42% % Copyright Ericsson AB 2007-2022. All Rights Reserved.
53% %
64% % Licensed under the Apache License, Version 2.0 (the "License");
8280 early_data_basic_auth /0 ,
8381 early_data_basic_auth /1 ,
8482 stateless_multiple_servers /0 ,
85- stateless_multiple_servers /1 ,
86- peercert_stateless_stateful_without_cert /0 ,
87- peercert_stateless_stateful_without_cert /1 ,
88- peercert_stateless_stateful_with_cert /0 ,
89- peercert_stateless_stateful_with_cert /1 ]).
83+ stateless_multiple_servers /1 ]).
9084
9185-include (" tls_handshake.hrl" ).
9286
@@ -109,20 +103,10 @@ groups() ->
109103 {group , stateful_with_cert },
110104 {group , stateless_with_cert },
111105 {group , mixed }]},
112- {stateful , [], session_tests () ++
113- [peercert_stateless_stateful_without_cert ]},
114- {stateless , [], session_tests () ++
115- [ticketage_smaller_than_windowsize_anti_replay ,
116- ticketage_bigger_than_windowsize_anti_replay ,
117- ticketage_out_of_lifetime_anti_replay , ticket_reuse_anti_replay ,
118- ticket_reuse_anti_replay_server_restart ,
119- ticket_reuse_anti_replay_server_restart_reused_seed ,
120- stateless_multiple_servers ,
121- peercert_stateless_stateful_without_cert ]},
122- {stateful_with_cert , [], session_tests () ++
123- [peercert_stateless_stateful_with_cert ]},
124- {stateless_with_cert , [], session_tests () ++
125- [peercert_stateless_stateful_with_cert ]},
106+ {stateful , [], session_tests ()},
107+ {stateless , [], session_tests () ++ anti_replay_tests ()},
108+ {stateful_with_cert , [], session_tests ()},
109+ {stateless_with_cert , [], session_tests () ++ anti_replay_tests ()},
126110 {mixed , [], mixed_tests ()}].
127111
128112session_tests () ->
@@ -139,6 +123,16 @@ session_tests() ->
139123 early_data_basic ,
140124 early_data_basic_auth ].
141125
126+ anti_replay_tests () ->
127+ [
128+ ticketage_smaller_than_windowsize_anti_replay ,
129+ ticketage_bigger_than_windowsize_anti_replay ,
130+ ticketage_out_of_lifetime_anti_replay , ticket_reuse_anti_replay ,
131+ ticket_reuse_anti_replay_server_restart ,
132+ ticket_reuse_anti_replay_server_restart_reused_seed ,
133+ stateless_multiple_servers
134+ ].
135+
142136mixed_tests () ->
143137 [
144138 basic_stateful_stateless ,
@@ -186,6 +180,7 @@ init_per_testcase(_, Config) ->
186180
187181end_per_testcase (_TestCase , Config ) ->
188182 application :unset_env (ssl , server_session_ticket_max_early_data ),
183+ application :unset_env (ssl , server_session_ticket_lifetime ),
189184 Config .
190185
191186% %--------------------------------------------------------------------
@@ -224,6 +219,15 @@ basic(Config) when is_list(Config) ->
224219 {from , self ()}, {options , ClientOpts }]),
225220 ssl_test_lib :check_result (Server0 , ok , Client0 , ok ),
226221
222+ Server0 ! get_socket ,
223+ SSocket0 =
224+ receive
225+ {Server0 , {socket , Socket0 }} ->
226+ Socket0
227+ end ,
228+
229+ {ok , ClientCert } = ssl :peercert (SSocket0 ),
230+
227231 Server0 ! {listen , {mfa , {ssl_test_lib ,
228232 verify_active_session_resumption ,
229233 [true ]}}},
@@ -242,6 +246,21 @@ basic(Config) when is_list(Config) ->
242246 {from , self ()}, {options , ClientOpts }]),
243247 ssl_test_lib :check_result (Server0 , ok , Client1 , ok ),
244248
249+ Server0 ! get_socket ,
250+ SSocket1 =
251+ receive
252+ {Server0 , {socket , Socket1 }} ->
253+ Socket1
254+ end ,
255+
256+ ExpectedPeercert = case ServerTicketMode of
257+ stateful_with_cert -> {ok , ClientCert };
258+ stateless_with_cert -> {ok , ClientCert };
259+ _ -> {error , no_peercert }
260+ end ,
261+
262+ ExpectedPeercert = ssl :peercert (SSocket1 ),
263+
245264 process_flag (trap_exit , false ),
246265 ssl_test_lib :close (Server0 ),
247266 ssl_test_lib :close (Client1 ).
@@ -1351,152 +1370,6 @@ stateless_multiple_servers(Config) when is_list(Config) ->
13511370 ssl_test_lib :close (Server1 ),
13521371 ssl_test_lib :close (Client1 ).
13531372
1354- peercert_stateless_stateful_without_cert () ->
1355- [{doc , " Test peercert not returning client certificate after resumption" }].
1356- peercert_stateless_stateful_without_cert (Config ) when is_list (Config ) ->
1357- ClientOpts0 = ssl_test_lib :ssl_options (client_rsa_verify_opts , Config ),
1358- ServerOpts0 = ssl_test_lib :ssl_options (server_rsa_verify_opts , Config ),
1359- {ClientNode , ServerNode , Hostname } = ssl_test_lib :run_where (Config ),
1360- ServerTicketMode = proplists :get_value (server_ticket_mode , Config ),
1361-
1362- % % Configure session tickets
1363- ClientOpts = [{session_tickets , auto },
1364- {versions , ['tlsv1.2' ,'tlsv1.3' ]}|ClientOpts0 ],
1365- ServerOpts = [{session_tickets , ServerTicketMode },
1366- {versions , ['tlsv1.2' ,'tlsv1.3' ]}|ServerOpts0 ],
1367-
1368- Server0 =
1369- ssl_test_lib :start_server ([{node , ServerNode }, {port , 0 },
1370- {from , self ()},
1371- {mfa , {ssl_test_lib ,
1372- verify_active_session_resumption ,
1373- [false ]}},
1374- {options , ServerOpts }]),
1375- Port0 = ssl_test_lib :inet_port (Server0 ),
1376-
1377- % % Store ticket from first connection
1378- Client0 = ssl_test_lib :start_client ([{node , ClientNode },
1379- {port , Port0 }, {host , Hostname },
1380- {mfa , {ssl_test_lib , % % Full handshake
1381- verify_active_session_resumption ,
1382- [false ]}},
1383- {from , self ()}, {options , ClientOpts }]),
1384- ssl_test_lib :check_result (Server0 , ok , Client0 , ok ),
1385-
1386- Server0 ! get_socket ,
1387- SSocket0 =
1388- receive
1389- {Server0 , {socket , Socket0 }} ->
1390- Socket0
1391- end ,
1392-
1393- {ok , _ClientCert } = ssl :peercert (SSocket0 ),
1394-
1395- Server0 ! {listen , {mfa , {ssl_test_lib ,
1396- verify_active_session_resumption ,
1397- [true ]}}},
1398-
1399- % % Wait for session ticket
1400- ct :sleep (100 ),
1401-
1402- ssl_test_lib :close (Client0 ),
1403-
1404- % % Use ticket
1405- Client1 = ssl_test_lib :start_client ([{node , ClientNode },
1406- {port , Port0 }, {host , Hostname },
1407- {mfa , {ssl_test_lib , % % Short handshake
1408- verify_active_session_resumption ,
1409- [true ]}},
1410- {from , self ()}, {options , ClientOpts }]),
1411-
1412- ssl_test_lib :check_result (Server0 , ok , Client1 , ok ),
1413-
1414- Server0 ! get_socket ,
1415- SSocket1 =
1416- receive
1417- {Server0 , {socket , Socket1 }} ->
1418- Socket1
1419- end ,
1420-
1421- {error , no_peercert } = ssl :peercert (SSocket1 ),
1422-
1423- process_flag (trap_exit , false ),
1424- ssl_test_lib :close (Server0 ),
1425- ssl_test_lib :close (Client1 ).
1426-
1427- peercert_stateless_stateful_with_cert () ->
1428- [{doc , " Test peercert returning client certificate after resumption" }].
1429- peercert_stateless_stateful_with_cert (Config ) when is_list (Config ) ->
1430- ClientOpts0 = ssl_test_lib :ssl_options (client_rsa_verify_opts , Config ),
1431- ServerOpts0 = ssl_test_lib :ssl_options (server_rsa_verify_opts , Config ),
1432- {ClientNode , ServerNode , Hostname } = ssl_test_lib :run_where (Config ),
1433- ServerTicketMode = proplists :get_value (server_ticket_mode , Config ),
1434-
1435- % % Configure session tickets
1436- ClientOpts = [{session_tickets , auto },
1437- {versions , ['tlsv1.2' ,'tlsv1.3' ]}|ClientOpts0 ],
1438- ServerOpts = [{session_tickets , ServerTicketMode },
1439- {versions , ['tlsv1.2' ,'tlsv1.3' ]}|ServerOpts0 ],
1440-
1441- Server0 =
1442- ssl_test_lib :start_server ([{node , ServerNode }, {port , 0 },
1443- {from , self ()},
1444- {mfa , {ssl_test_lib ,
1445- verify_active_session_resumption ,
1446- [false ]}},
1447- {options , ServerOpts }]),
1448- Port0 = ssl_test_lib :inet_port (Server0 ),
1449-
1450- % % Store ticket from first connection
1451- Client0 = ssl_test_lib :start_client ([{node , ClientNode },
1452- {port , Port0 }, {host , Hostname },
1453- {mfa , {ssl_test_lib , % % Full handshake
1454- verify_active_session_resumption ,
1455- [false ]}},
1456- {from , self ()}, {options , ClientOpts }]),
1457- ssl_test_lib :check_result (Server0 , ok , Client0 , ok ),
1458-
1459- Server0 ! get_socket ,
1460- SSocket0 =
1461- receive
1462- {Server0 , {socket , Socket0 }} ->
1463- Socket0
1464- end ,
1465-
1466- {ok , ClientCert } = ssl :peercert (SSocket0 ),
1467-
1468- Server0 ! {listen , {mfa , {ssl_test_lib ,
1469- verify_active_session_resumption ,
1470- [true ]}}},
1471-
1472- % % Wait for session ticket
1473- ct :sleep (100 ),
1474-
1475- ssl_test_lib :close (Client0 ),
1476-
1477- % % Use ticket
1478- Client1 = ssl_test_lib :start_client ([{node , ClientNode },
1479- {port , Port0 }, {host , Hostname },
1480- {mfa , {ssl_test_lib , % % Short handshake
1481- verify_active_session_resumption ,
1482- [true ]}},
1483- {from , self ()}, {options , ClientOpts }]),
1484-
1485- ssl_test_lib :check_result (Server0 , ok , Client1 , ok ),
1486-
1487- Server0 ! get_socket ,
1488- SSocket1 =
1489- receive
1490- {Server0 , {socket , Socket1 }} ->
1491- Socket1
1492- end ,
1493-
1494- {ok , ClientCert } = ssl :peercert (SSocket1 ),
1495-
1496- process_flag (trap_exit , false ),
1497- ssl_test_lib :close (Server0 ),
1498- ssl_test_lib :close (Client1 ).
1499-
15001373% %--------------------------------------------------------------------
15011374% % Internal functions ------------------------------------------------
15021375% %--------------------------------------------------------------------
0 commit comments