@@ -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 ]},
@@ -206,6 +212,17 @@ mqtt_config(ssl_user_with_client_id_in_cert_san_dns) ->
206212 {allow_anonymous , false },
207213 {ssl_cert_client_id_from , subject_alternative_name },
208214 {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 }]};
209226mqtt_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
217234auth_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
502525client_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