Я использую центр сертификации Windows (AD CS) для выдачи сертификатов участникам безопасного соединения между службой Windows RabbitMQ и клиентом.
Предметом моего сертификата клиента является мое отличительное имя (DN) в LDAP:
«CN = Джон Руис, CN = Пользователи, DC = devexample, DC = com»
Когда я пытаюсь установить это соединение, сервер выдает исключение и закрывает соединение, и я вижу эту трассировку стека erlang в журнале кролика:
=ERROR REPORT==== 30-Dec-2011::10:33:24 ===
exception on TCP connection <0.331.0> from 10.1.30.70:52269
{channel0_error,starting,
{error,{case_clause,[{printableString,"Users"},
{printableString,"John Ruiz"}]},
'connection.start_ok',
[{rabbit_ssl,find_by_type,2,[]},
{rabbit_auth_mechanism_ssl,init,1,[]},
{rabbit_reader,handle_method0,2,[]},
{rabbit_reader,handle_method0,3,[]},
{rabbit_reader,handle_input,3,[]},
{rabbit_reader,recvloop,2,[]},
{rabbit_reader,start_connection,7,[]},
{proc_lib,init_p_do_apply,3,
[{file,"proc_lib.erl"},{line,227}]}]}}
Просматривая последние две строки в трассировке стека, я обнаружил два файла:
- rabbit_ssl.erl
- rabbit_auth_mechanism_ssl.erl
Проблема в том, что раньше я не читал и не писал erlang, поэтому я не знаю, почему find_by_type вызывает исключение. Мое лучшее предположение состоит в том, что, поскольку в списке относительных DN (RDN) есть два элемента CN = *, результатом вызова списков: flatten является массив, тогда как ожидаемый результат - скаляр.
Может ли кто-нибудь, знакомый с erlang, подтвердить или исправить мое предположение? Если вы видите способ, которым этот код может быть улучшен для обработки только что описанного случая (вместо исключения), я был бы очень признателен, чтобы предложить его в списке рассылки RabbitMQ.