Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 1 addition & 12 deletions deps/rabbit/src/rabbit_ssl.erl
Original file line number Diff line number Diff line change
Expand Up @@ -39,18 +39,7 @@

-spec wrap_password_opt(tls_opts()) -> tls_opts().
wrap_password_opt(Opts0) ->
case proplists:get_value(password, Opts0) of
undefined ->
Opts0;
Fun when is_function(Fun) ->
Opts0;
Password ->
%% A password can be a value or a function returning that value.
%% See the key_pem_password/0 type in https://github.com/erlang/otp/pull/5843/files.
NewOpts = proplists:delete(password, Opts0),
Fun = fun() -> Password end,
[{password, Fun} | NewOpts]
end.
rabbit_ssl_options:wrap_password_opt(Opts0).

-spec cipher_suites(cipher_suites_mode()) -> ssl:ciphers().
cipher_suites(Mode) ->
Expand Down
4 changes: 2 additions & 2 deletions deps/rabbit/test/unit_rabbit_ssl_SUITE.erl
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ wrap_tls_opts_with_binary_password(_Config) ->
{password, Bin}
],

Opts = rabbit_ssl:wrap_password_opt(Opts0),
Opts = rabbit_ssl_options:wrap_password_opt(Opts0),
M = maps:from_list(Opts),

?assertEqual(Path, maps:get(keyfile, M)),
Expand All @@ -53,7 +53,7 @@ wrap_tls_opts_with_function_password(_Config) ->
{password, Fun}
],

Opts = rabbit_ssl:wrap_password_opt(Opts0),
Opts = rabbit_ssl_options:wrap_password_opt(Opts0),
M = maps:from_list(Opts),

?assertEqual(Path, maps:get(keyfile, M)),
Expand Down
25 changes: 22 additions & 3 deletions deps/rabbit_common/src/rabbit_ssl_options.erl
Original file line number Diff line number Diff line change
Expand Up @@ -7,15 +7,34 @@

-module(rabbit_ssl_options).

-export([fix/1]).
-export([fix_client/1]).

-export([
fix/1,
fix_client/1,
wrap_password_opt/1
]).

-define(BAD_SSL_PROTOCOL_VERSIONS, [
%% POODLE
sslv3
]).

-type tls_opts() :: [ssl:tls_server_option()] | [ssl:tls_client_option()].

-spec wrap_password_opt(tls_opts()) -> tls_opts().
wrap_password_opt(Opts0) ->
case proplists:get_value(password, Opts0) of
undefined ->
Opts0;
Fun when is_function(Fun) ->
Opts0;
Password ->
%% A password can be a value or a function returning that value.
%% See the key_pem_password/0 type in https://github.com/erlang/otp/pull/5843/files.
NewOpts = proplists:delete(password, Opts0),
Fun = fun() -> Password end,
[{password, Fun} | NewOpts]
end.

-spec fix(rabbit_types:infos()) -> rabbit_types:infos().

fix(Config) ->
Expand Down
5 changes: 3 additions & 2 deletions deps/rabbitmq_management/src/rabbit_mgmt_app.erl
Original file line number Diff line number Diff line change
Expand Up @@ -128,16 +128,17 @@ get_legacy_listener() ->
get_tls_listener() ->
{ok, Listener0} = application:get_env(rabbitmq_management, ssl_config),
{ok, Listener1} = ensure_port(tls, Listener0),
Listener2 = rabbit_ssl:wrap_password_opt(Listener1),
Port = proplists:get_value(port, Listener1),
case proplists:get_value(cowboy_opts, Listener0) of
undefined ->
[
{port, Port},
{ssl, true},
{ssl_opts, Listener0}
{ssl_opts, Listener2}
];
CowboyOpts ->
WithoutCowboyOpts = lists:keydelete(cowboy_opts, 1, Listener0),
WithoutCowboyOpts = lists:keydelete(cowboy_opts, 1, Listener2),
[
{port, Port},
{ssl, true},
Expand Down
15 changes: 12 additions & 3 deletions deps/rabbitmq_management/test/listener_config_SUITE.erl
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,7 @@ tcp_config_only(_Config) ->
]},
{port, 999}
],
?assertEqual(lists:usort(Expected), get_single_listener_config()).
?assertEqual(sort_nested(Expected), sort_nested(get_single_listener_config())).

ssl_config_only(_Config) ->
application:set_env(rabbitmq_management, ssl_config, [
Expand All @@ -92,7 +92,7 @@ ssl_config_only(_Config) ->
{idle_timeout, 10000}
]}
],
?assertEqual(lists:usort(Expected), get_single_listener_config()).
?assertEqual(sort_nested(Expected), sort_nested(get_single_listener_config())).

multiple_listeners(_Config) ->
application:set_env(rabbitmq_management, tcp_config, [
Expand Down Expand Up @@ -126,9 +126,18 @@ multiple_listeners(_Config) ->
]}
]
],
?assertEqual(lists:usort(Expected), rabbit_mgmt_app:get_listeners_config()).
?assertEqual(sort_nested(Expected), sort_nested(rabbit_mgmt_app:get_listeners_config())).


get_single_listener_config() ->
[Config] = rabbit_mgmt_app:get_listeners_config(),
lists:usort(Config).

sort_nested(Proplist) when is_list(Proplist) ->
lists:usort(lists:map(fun({K, V}) when is_list(V) ->
{K, lists:usort(V)};
(Any) ->
sort_nested(Any)
end, Proplist));
sort_nested(Value) ->
Value.
20 changes: 15 additions & 5 deletions deps/rabbitmq_prometheus/src/rabbit_prometheus_app.erl
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,16 @@ init(_) ->
-spec start_configured_listener() -> ok.
start_configured_listener() ->
TCPListenerConf = get_env(tcp_config, []),
TLSListenerConf = get_env(ssl_config, []),
TLSListenerConf0 = get_env(ssl_config, []),
TLSListenerConf =
case proplists:get_value(ssl_opts, TLSListenerConf0, undefined) of
undefined ->
TLSListenerConf0;
Opts0 ->
Opts = rabbit_ssl:wrap_password_opt(Opts0),
Tmp = proplists:delete(ssl_opts, TLSListenerConf0),
[{ssl_opts, Opts} | Tmp]
end,

case {TCPListenerConf, TLSListenerConf} of
%% nothing is configured
Expand Down Expand Up @@ -64,10 +73,11 @@ start_configured_tcp_listener(Conf) ->
start_configured_tls_listener(Conf) ->
case Conf of
[] -> ok;
SSLCon ->
SSLListener0 = [{ssl, true} | SSLCon],
SSLListener1 = maybe_disable_sendfile(SSLListener0),
start_listener(SSLListener1)
TLSConf ->
TLSListener0 = [{ssl, true} | TLSConf],
TLSListener1 = maybe_disable_sendfile(TLSListener0),
TLSListener2 = rabbit_ssl:wrap_password_opt(TLSListener1),
start_listener(TLSListener2)
end.

maybe_disable_sendfile(Listener) ->
Expand Down
8 changes: 5 additions & 3 deletions deps/rabbitmq_web_dispatch/src/rabbit_web_dispatch_sup.erl
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,8 @@ ensure_listener(Listener) ->
undefined ->
{error, {no_port_given, Listener}};
_ ->
{Transport, TransportOpts, ProtoOpts} = preprocess_config(Listener),
{Transport, TransportOpts0, ProtoOpts} = preprocess_config(Listener),
TransportOpts = rabbit_ssl_options:wrap_password_opt(TransportOpts0),
ProtoOptsMap = maps:from_list(ProtoOpts),
StreamHandlers = stream_handlers_config(ProtoOpts),
rabbit_log:debug("Starting HTTP[S] listener with transport ~ts", [Transport]),
Expand Down Expand Up @@ -86,9 +87,10 @@ auto_ssl(Options) ->
fix_ssl([{ssl_opts, SSLOpts} | Options]).

fix_ssl(Options) ->
SSLOpts = proplists:get_value(ssl_opts, Options),
TLSOpts0 = proplists:get_value(ssl_opts, Options),
TLSOpts = rabbit_ssl_options:wrap_password_opt(TLSOpts0),
{ranch_ssl,
transport_config(Options ++ rabbit_networking:fix_ssl_options(SSLOpts)),
transport_config(Options ++ rabbit_networking:fix_ssl_options(TLSOpts)),
protocol_config(Options)}.

transport_config(Options0) ->
Expand Down
Loading