@@ -72,6 +72,12 @@ sub_groups() ->
72
72
[client_id_from_cert_san_dns ,
73
73
invalid_client_id_from_cert_san_dns
74
74
]},
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
+ ]},
75
81
{ssl_user_with_client_id_in_cert_dn , [],
76
82
[client_id_from_cert_dn
77
83
]},
@@ -205,7 +211,18 @@ mqtt_config(ssl_user_with_client_id_in_cert_san_dns) ->
205
211
{rabbitmq_mqtt , [{ssl_cert_login , true },
206
212
{allow_anonymous , false },
207
213
{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 }]};
209
226
mqtt_config (ssl_user_with_client_id_in_cert_dn ) ->
210
227
{rabbitmq_mqtt , [{ssl_cert_login , true },
211
228
{allow_anonymous , false },
@@ -216,6 +233,8 @@ mqtt_config(_) ->
216
233
217
234
auth_config (T ) when T == client_id_propagation ;
218
235
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 ;
219
238
T == ssl_user_with_client_id_in_cert_dn ->
220
239
{rabbit , [
221
240
{auth_backends , [rabbit_auth_backend_mqtt_mock ]}
@@ -316,6 +335,8 @@ init_per_testcase(T, Config)
316
335
when T =:= client_id_propagation ;
317
336
T =:= invalid_client_id_from_cert_san_dns ;
318
337
T =:= client_id_from_cert_san_dns ;
338
+ T =:= client_id_from_cert_san_dns_1 ;
339
+ T =:= client_id_from_cert_san_email ;
319
340
T =:= client_id_from_cert_dn ->
320
341
SetupProcess = setup_rabbit_auth_backend_mqtt_mock (Config ),
321
342
rabbit_ct_helpers :set_config (Config , {mock_setup_process , SetupProcess });
@@ -444,6 +465,8 @@ end_per_testcase(T, Config)
444
465
when T =:= client_id_propagation ;
445
466
T =:= invalid_client_id_from_cert_san_dns ;
446
467
T =:= client_id_from_cert_san_dns ;
468
+ T =:= client_id_from_cert_san_dns_1 ;
469
+ T =:= client_id_from_cert_san_email ;
447
470
T =:= client_id_from_cert_dn ->
448
471
SetupProcess = ? config (mock_setup_process , Config ),
449
472
SetupProcess ! stop ;
@@ -500,7 +523,31 @@ user_credentials_auth(Config) ->
500
523
Config ).
501
524
502
525
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
504
551
MqttClientId = ExpectedClientId ,
505
552
{ok , C } = connect_ssl (MqttClientId , Config ),
506
553
{ok , _ } = emqtt :connect (C ),
0 commit comments