我正在使用 Windows 证书颁发机构 (AD CS) 为 RabbitMQ Windows 服务和客户端之间的安全连接中的参与者颁发证书。
我的客户端证书的主题是我在 LDAP 中的专有名称 (DN):“CN=John Ruiz,CN=Users,DC=devexample,DC=com”
当我尝试建立此连接时,服务器抛出异常并关闭连接,我在 rabbit 日志中看到了这个 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}]}]}}
查看堆栈跟踪中的最后两行,我发现涉及的两个文件:
问题是我以前既没有读过也没有写过erlang,所以我不知道为什么find_by_type会抛出异常。我最好的猜测是,由于相对 DN (RDN) 列表中有两个 CN=* 元素,因此调用 lists:flatten 的结果是一个数组,而预期的结果是一个标量。
熟悉erlang的人可以确认或更正我的假设吗?如果您看到可以改进此代码以处理我刚刚描述的情况(而不是抛出异常)的方法,我将非常感激,以便我可以在 RabbitMQ 邮件列表中提出建议。