Skip to content

Commit 3398d2a

Browse files
committed
ssl: TLS-1.2 session reuse and client certs
Make session_reuse disabled by default when client certificates are requierd, until extend master secret can be implemented. But best option is to run TLS-1.3.
1 parent 180b376 commit 3398d2a

4 files changed

Lines changed: 27 additions & 15 deletions

File tree

lib/ssl/src/ssl.erl

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4630,7 +4630,16 @@ opt_reuse_sessions(UserOpts, #{versions := Versions} = Opts, #{role := client})
46304630
assert_version_dep(Where2 =:= new, reuse_session, Versions, ['tlsv1','tlsv1.1','tlsv1.2']),
46314631
Opts#{reuse_sessions => RUSS, reuse_session => RS};
46324632
opt_reuse_sessions(UserOpts, #{versions := Versions} = Opts, #{role := server}) ->
4633-
{Where1, RUSS} = get_opt_bool(reuse_sessions, true, UserOpts, Opts),
4633+
%% Disable reuse_sessions when client cert verify_peer
4634+
%% verification is required, until Extended Master Secret is implemented.
4635+
ReuseDefault = case maps:get(verify, Opts) of
4636+
verify_peer ->
4637+
false;
4638+
verify_none ->
4639+
true
4640+
end,
4641+
4642+
{Where1, RUSS} = get_opt_bool(reuse_sessions, ReuseDefault, UserOpts, Opts),
46344643

46354644
DefRS = fun(_, _, _, _) -> true end,
46364645
{Where2, RS} = get_opt_fun(reuse_session, 4, DefRS, UserOpts, Opts),

lib/ssl/src/ssl_config.erl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -380,7 +380,7 @@ dh_file(DbHandle, DHParamFile) ->
380380
end
381381
catch
382382
_:Reason ->
383-
file_error(DHParamFile, {dhfile, Reason})
383+
file_error(DHParamFile, {dhfile, Reason})
384384
end.
385385

386386
session_cb_init_args(client) ->

lib/ssl/test/ssl_session_SUITE.erl

Lines changed: 15 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -199,7 +199,7 @@ reuse_session_expired(Config) when is_list(Config) ->
199199
{from, self()},
200200
{mfa, {ssl_test_lib, no_result, []}},
201201
{tcp_options, [{active, false}]},
202-
{options, ServerOpts}]),
202+
{options, [{reuse_sessions, true}| ServerOpts]}]),
203203
Port0 = ssl_test_lib:inet_port(Server0),
204204

205205
Client0 = ssl_test_lib:start_client([{node, ClientNode},
@@ -328,7 +328,7 @@ explicit_session_reuse(Config) when is_list(Config) ->
328328
ssl_test_lib:start_server([{node, ServerNode}, {port, 0},
329329
{from, self()},
330330
{mfa, {ssl_test_lib, no_result, []}},
331-
{options, ServerOpts}]),
331+
{options, [{reuse_sessions, true} | ServerOpts]}]),
332332
Port = ssl_test_lib:inet_port(Server),
333333
{Client0, Client0Sock} =
334334
ssl_test_lib:start_client([{node, ClientNode},
@@ -367,7 +367,7 @@ explicit_session_reuse_expired(Config) when is_list(Config) ->
367367
ssl_test_lib:start_server([{node, ServerNode}, {port, 0},
368368
{from, self()},
369369
{mfa, {ssl_test_lib, no_result, []}},
370-
{options, ServerOpts}]),
370+
{options, [{reuse_sessions, true} | ServerOpts]}]),
371371
Port = ssl_test_lib:inet_port(Server),
372372
{Client0, Client0Sock} =
373373
ssl_test_lib:start_client([{node, ClientNode},
@@ -471,8 +471,9 @@ no_reuses_session_server_restart_new_cert() ->
471471
[{doc,"Check that a session is not reused if the server is restarted with a new cert."}].
472472
no_reuses_session_server_restart_new_cert(Config) when is_list(Config) ->
473473
ClientOpts = ssl_test_lib:ssl_options(client_rsa_der_opts, Config),
474-
ServerOpts = ssl_test_lib:ssl_options(server_rsa_der_verify_opts, Config),
475-
POpts = proplists:get_value(protocol_opts, Config, []),
474+
ServerOpts = [{reuse_sessions, true} |
475+
ssl_test_lib:ssl_options(server_rsa_der_verify_opts, Config)],
476+
POpts = proplists:get_value(group_opts, Config, []),
476477

477478
#{client_config := NewCOpts,
478479
server_config := NewSOpts} = ssl_test_lib:make_cert_chains_der(rsa,
@@ -483,16 +484,17 @@ no_reuses_session_server_restart_new_cert(Config) when is_list(Config) ->
483484
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
484485

485486
Server0 =
486-
ssl_test_lib:start_server([{node, ServerNode}, {port, 0},
487-
{from, self()},
487+
ssl_test_lib:start_server([{node, ServerNode}, {port, 0},
488+
{from, self()},
488489
{mfa, {ssl_test_lib, session_info_result, []}},
489-
{options, ServerOpts}]),
490+
{options, ServerOpts}]),
490491
Port = ssl_test_lib:inet_port(Server0),
491492
Client0 =
492493
ssl_test_lib:start_client([{node, ClientNode},
493494
{port, Port}, {host, Hostname},
494495
{mfa, {ssl_test_lib, session_info_result, []}},
495-
{from, self()}, {options, [{reuse_sessions, save} | ClientOpts]}]),
496+
{from, self()},
497+
{options, [{reuse_sessions, save} | ClientOpts]}]),
496498
Info0 = receive {Server0, Info00} -> Info00 end,
497499
Info0 = receive {Client0, Info01} -> Info01 end,
498500

@@ -597,7 +599,8 @@ client_max_session_table(Config) when is_list(Config)->
597599
ClientOpts = ssl_test_lib:ssl_options(client_rsa_verify_opts, Config),
598600
ServerOpts = ssl_test_lib:ssl_options(server_rsa_verify_opts, Config),
599601
{ClientNode, ServerNode, HostName} = ssl_test_lib:run_where(Config),
600-
test_max_session_limit(ClientOpts,ServerOpts,ClientNode, ServerNode, HostName),
602+
test_max_session_limit(ClientOpts,[{reuse_sessions, true} | ServerOpts],
603+
ClientNode, ServerNode, HostName),
601604
%% Explicit check table size
602605
{status, _, _, StatusInfo} = sys:get_status(whereis(ssl_manager)),
603606
[_, _,_, _, Prop] = StatusInfo,
@@ -612,7 +615,8 @@ server_max_session_table(Config) when is_list(Config)->
612615
ClientOpts = ssl_test_lib:ssl_options(client_rsa_verify_opts, Config),
613616
ServerOpts = ssl_test_lib:ssl_options(server_rsa_verify_opts, Config),
614617
{ClientNode, ServerNode, HostName} = ssl_test_lib:run_where(Config),
615-
test_max_session_limit(ClientOpts,ServerOpts,ClientNode, ServerNode, HostName),
618+
test_max_session_limit(ClientOpts,[{reuse_sessions, true} | ServerOpts],
619+
ClientNode, ServerNode, HostName),
616620
%% Explicit check table size
617621
SupName = sup_name(ServerOpts),
618622
Sup = whereis(SupName),
@@ -648,7 +652,6 @@ session_table_stable_size_on_tcp_close(Config) when is_list(Config)->
648652
faulty_client(Hostname, Port),
649653
check_table_did_not_grow(SessionCachePid, N).
650654

651-
652655
%%--------------------------------------------------------------------
653656
%% Internal functions ------------------------------------------------
654657
%%--------------------------------------------------------------------

lib/ssl/test/ssl_test_lib.erl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3958,7 +3958,7 @@ reuse_session(ClientOpts, ServerOpts, Config) ->
39583958
{from, self()},
39593959
{mfa, {ssl_test_lib, no_result, []}},
39603960
{tcp_options, [{active, false}]},
3961-
{options, ServerOpts}]),
3961+
{options, [{reuse_sessions, true} | ServerOpts]}]),
39623962
Port0 = inet_port(Server0),
39633963

39643964
Client0 = start_client([{node, ClientNode},

0 commit comments

Comments
 (0)