Skip to content

Commit 77867be

Browse files
Merge pull request #12618 from rabbitmq/mergify/bp/v4.0.x/pr-12604
MQTT, x.509 certificate-based authentication: use the correct key name for the TLS SAN type configuration parameter (backport #12604)
2 parents e2c5b28 + 23fc7ee commit 77867be

File tree

4 files changed

+55
-5
lines changed

4 files changed

+55
-5
lines changed

deps/rabbitmq_ct_helpers/tools/tls-certs/openssl.cnf.in

+3
Original file line numberDiff line numberDiff line change
@@ -63,3 +63,6 @@ DNS.2 = localhost
6363

6464
[ client_alt_names ]
6565
DNS.1 = rabbit_client_id
66+
DNS.2 = rabbit_client_id_ext
67+
email.1 = rabbit_client@localhost
68+
URI.1 = rabbit_client_id_uri

deps/rabbitmq_mqtt/BUILD.bazel

+1-1
Original file line numberDiff line numberDiff line change
@@ -135,7 +135,7 @@ rabbitmq_integration_suite(
135135
"test/rabbit_auth_backend_mqtt_mock.beam",
136136
"test/util.beam",
137137
],
138-
shard_count = 18,
138+
shard_count = 22,
139139
runtime_deps = [
140140
"@emqtt//:erlang_app",
141141
"@meck//:erlang_app",

deps/rabbitmq_mqtt/src/rabbit_mqtt_processor.erl

+2-2
Original file line numberDiff line numberDiff line change
@@ -2330,8 +2330,8 @@ extract_ssl_cert_client_id_settings() ->
23302330

23312331
extract_client_id_san_type(Mode) ->
23322332
{Mode,
2333-
application:get_env(?APP_NAME, ssl_cert_client_id_san_type, dns),
2334-
application:get_env(?APP_NAME, ssl_cert_client_id_san_index, 0)
2333+
application:get_env(?APP_NAME, ssl_cert_login_san_type, dns),
2334+
application:get_env(?APP_NAME, ssl_cert_login_san_index, 0)
23352335
}.
23362336

23372337

deps/rabbitmq_mqtt/test/auth_SUITE.erl

+49-2
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,12 @@ sub_groups() ->
7272
[client_id_from_cert_san_dns,
7373
invalid_client_id_from_cert_san_dns
7474
]},
75+
{ssl_user_with_client_id_in_cert_san_dns_1, [],
76+
[client_id_from_cert_san_dns_1
77+
]},
78+
{ssl_user_with_client_id_in_cert_san_email, [],
79+
[client_id_from_cert_san_email
80+
]},
7581
{ssl_user_with_client_id_in_cert_dn, [],
7682
[client_id_from_cert_dn
7783
]},
@@ -205,7 +211,18 @@ mqtt_config(ssl_user_with_client_id_in_cert_san_dns) ->
205211
{rabbitmq_mqtt, [{ssl_cert_login, true},
206212
{allow_anonymous, false},
207213
{ssl_cert_client_id_from, subject_alternative_name},
208-
{ssl_cert_client_id_san_type, dns}]};
214+
{ssl_cert_login_san_type, dns}]};
215+
mqtt_config(ssl_user_with_client_id_in_cert_san_dns_1) ->
216+
{rabbitmq_mqtt, [{ssl_cert_login, true},
217+
{allow_anonymous, false},
218+
{ssl_cert_client_id_from, subject_alternative_name},
219+
{ssl_cert_login_san_type, dns},
220+
{ssl_cert_login_san_index, 1}]};
221+
mqtt_config(ssl_user_with_client_id_in_cert_san_email) ->
222+
{rabbitmq_mqtt, [{ssl_cert_login, true},
223+
{allow_anonymous, false},
224+
{ssl_cert_client_id_from, subject_alternative_name},
225+
{ssl_cert_login_san_type, email}]};
209226
mqtt_config(ssl_user_with_client_id_in_cert_dn) ->
210227
{rabbitmq_mqtt, [{ssl_cert_login, true},
211228
{allow_anonymous, false},
@@ -216,6 +233,8 @@ mqtt_config(_) ->
216233

217234
auth_config(T) when T == client_id_propagation;
218235
T == ssl_user_with_client_id_in_cert_san_dns;
236+
T == ssl_user_with_client_id_in_cert_san_dns_1;
237+
T == ssl_user_with_client_id_in_cert_san_email;
219238
T == ssl_user_with_client_id_in_cert_dn ->
220239
{rabbit, [
221240
{auth_backends, [rabbit_auth_backend_mqtt_mock]}
@@ -316,6 +335,8 @@ init_per_testcase(T, Config)
316335
when T =:= client_id_propagation;
317336
T =:= invalid_client_id_from_cert_san_dns;
318337
T =:= client_id_from_cert_san_dns;
338+
T =:= client_id_from_cert_san_dns_1;
339+
T =:= client_id_from_cert_san_email;
319340
T =:= client_id_from_cert_dn ->
320341
SetupProcess = setup_rabbit_auth_backend_mqtt_mock(Config),
321342
rabbit_ct_helpers:set_config(Config, {mock_setup_process, SetupProcess});
@@ -444,6 +465,8 @@ end_per_testcase(T, Config)
444465
when T =:= client_id_propagation;
445466
T =:= invalid_client_id_from_cert_san_dns;
446467
T =:= client_id_from_cert_san_dns;
468+
T =:= client_id_from_cert_san_dns_1;
469+
T =:= client_id_from_cert_san_email;
447470
T =:= client_id_from_cert_dn ->
448471
SetupProcess = ?config(mock_setup_process, Config),
449472
SetupProcess ! stop;
@@ -500,7 +523,31 @@ user_credentials_auth(Config) ->
500523
Config).
501524

502525
client_id_from_cert_san_dns(Config) ->
503-
ExpectedClientId = <<"rabbit_client_id">>, % Found in the client's certificate as SAN type CLIENT_ID
526+
ExpectedClientId = <<"rabbit_client_id">>, % Found in the client's certificate as SAN type DNS
527+
MqttClientId = ExpectedClientId,
528+
{ok, C} = connect_ssl(MqttClientId, Config),
529+
{ok, _} = emqtt:connect(C),
530+
[{authentication, AuthProps}] = rpc(Config, 0,
531+
rabbit_auth_backend_mqtt_mock,
532+
get,
533+
[authentication]),
534+
?assertEqual(ExpectedClientId, proplists:get_value(client_id, AuthProps)),
535+
ok = emqtt:disconnect(C).
536+
537+
client_id_from_cert_san_dns_1(Config) ->
538+
ExpectedClientId = <<"rabbit_client_id_ext">>, % Found in the client's certificate as SAN type DNS
539+
MqttClientId = ExpectedClientId,
540+
{ok, C} = connect_ssl(MqttClientId, Config),
541+
{ok, _} = emqtt:connect(C),
542+
[{authentication, AuthProps}] = rpc(Config, 0,
543+
rabbit_auth_backend_mqtt_mock,
544+
get,
545+
[authentication]),
546+
?assertEqual(ExpectedClientId, proplists:get_value(client_id, AuthProps)),
547+
ok = emqtt:disconnect(C).
548+
549+
client_id_from_cert_san_email(Config) ->
550+
ExpectedClientId = <<"rabbit_client@localhost">>, % Found in the client's certificate as SAN type email
504551
MqttClientId = ExpectedClientId,
505552
{ok, C} = connect_ssl(MqttClientId, Config),
506553
{ok, _} = emqtt:connect(C),

0 commit comments

Comments
 (0)