Skip to content

Commit 2757803

Browse files
Merge pull request #11375 from rabbitmq/mergify/bp/v3.13.x/pr-11369
amqp10_client: allow configuring global TLS options (backport #11369)
2 parents e7591dc + 8160388 commit 2757803

File tree

2 files changed

+36
-1
lines changed

2 files changed

+36
-1
lines changed

deps/amqp10_client/src/amqp10_client.erl

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -110,7 +110,8 @@ open_connection(ConnectionConfig0) ->
110110
},
111111
Sasl = maps:get(sasl, ConnectionConfig1),
112112
ConnectionConfig2 = ConnectionConfig1#{sasl => amqp10_client_connection:encrypt_sasl(Sasl)},
113-
amqp10_client_connection:open(ConnectionConfig2).
113+
ConnectionConfig = merge_default_tls_options(ConnectionConfig2),
114+
amqp10_client_connection:open(ConnectionConfig).
114115

115116
%% @doc Opens a connection using a connection_config map
116117
%% This is asynchronous and will notify completion to the caller using
@@ -506,6 +507,19 @@ try_to_existing_atom(L) when is_list(L) ->
506507
ensure_started() ->
507508
_ = application:ensure_all_started(credentials_obfuscation).
508509

510+
511+
-spec merge_default_tls_options(connection_config()) -> connection_config().
512+
merge_default_tls_options(#{tls_opts := {secure_port, TlsOpts0}} = Config) ->
513+
GlobalTlsOpts = application:get_env(amqp10_client, ssl_options, []),
514+
TlsOpts =
515+
orddict:to_list(
516+
orddict:merge(fun (_, _A, B) -> B end,
517+
orddict:from_list(GlobalTlsOpts),
518+
orddict:from_list(TlsOpts0))),
519+
Config#{tls_opts => {secure_port, TlsOpts}};
520+
merge_default_tls_options(Config) ->
521+
Config.
522+
509523
-ifdef(TEST).
510524
-include_lib("eunit/include/eunit.hrl").
511525

deps/amqp10_client/test/system_SUITE.erl

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@ groups() ->
4545
{activemq, [], shared()},
4646
{rabbitmq_strict, [], [
4747
basic_roundtrip_tls,
48+
roundtrip_tls_global_config,
4849
open_connection_plain_sasl,
4950
open_connection_plain_sasl_failure,
5051
open_connection_plain_sasl_parse_uri
@@ -281,6 +282,26 @@ basic_roundtrip_tls(Config) ->
281282
sasl => ?config(sasl, Config)},
282283
roundtrip(OpnConf).
283284

285+
%% ssl option validation fails if verify_peer is enabled without cacerts.
286+
%% Test that cacertfile option takes effect taken from the application env.
287+
roundtrip_tls_global_config(Config) ->
288+
Hostname = ?config(rmq_hostname, Config),
289+
Port = rabbit_ct_broker_helpers:get_node_config(Config, 0, tcp_port_amqp_tls),
290+
CACertFile = ?config(rmq_certsdir, Config) ++ "/testca/cacert.pem",
291+
CertFile = ?config(rmq_certsdir, Config) ++ "/client/cert.pem",
292+
KeyFile = ?config(rmq_certsdir, Config) ++ "/client/key.pem",
293+
ok = application:set_env(amqp10_client, ssl_options, [{cacertfile, CACertFile},
294+
{certfile, CertFile},
295+
{keyfile, KeyFile}]),
296+
OpnConf = #{address => Hostname,
297+
port => Port,
298+
tls_opts => {secure_port, [{verify, verify_peer}]},
299+
notify => self(),
300+
container_id => <<"open_connection_tls_container">>,
301+
sasl => ?config(sasl, Config)},
302+
roundtrip(OpnConf),
303+
application:unset_env(amqp10_client, ssl_options).
304+
284305
service_bus_config(Config, ContainerId) ->
285306
Hostname = ?config(sb_endpoint, Config),
286307
Port = ?config(sb_port, Config),

0 commit comments

Comments
 (0)