Skip to content

Commit 23dc8ff

Browse files
committed
Simplify tests and fix option depenency bug
1 parent e6cd74a commit 23dc8ff

File tree

2 files changed

+43
-167
lines changed

2 files changed

+43
-167
lines changed

lib/ssl/src/ssl.erl

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1605,6 +1605,9 @@ handle_option(anti_replay = Option, Value0,
16051605
stateless ->
16061606
Value = validate_option(Option, Value0),
16071607
OptionsMap#{Option => Value};
1608+
stateless_with_cert ->
1609+
Value = validate_option(Option, Value0),
1610+
OptionsMap#{Option => Value};
16081611
_ ->
16091612
OptionsMap#{Option => default_value(Option, Rules)}
16101613
end;

lib/ssl/test/ssl_session_ticket_SUITE.erl

Lines changed: 40 additions & 167 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,4 @@
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");
@@ -82,11 +80,7 @@
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

128112
session_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+
142136
mixed_tests() ->
143137
[
144138
basic_stateful_stateless,
@@ -186,6 +180,7 @@ init_per_testcase(_, Config) ->
186180

187181
end_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

Comments
 (0)