0

我正在使用 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}]}]}}

查看堆栈跟踪中的最后两行,我发现涉及的两个文件:

  1. rabbit_ssl.erl
  2. rabbit_auth_mechanism_ssl.erl

问题是我以前既没有读过也没有写过erlang,所以我不知道为什么find_by_type会抛出异常。我最好的猜测是,由于相对 DN (RDN) 列表中有两个 CN=* 元素,因此调用 lists:flatten 的结果是一个数组,而预期的结果是一个标量。

熟悉erlang的人可以确认或更正我的假设吗?如果您看到可以改进此代码以处理我刚刚描述的情况(而不是抛出异常)的方法,我将非常感激,以便我可以在 RabbitMQ 邮件列表中提出建议。

4

1 回答 1

1

你的猜测是正确的。它崩溃是因为有两个 CN=* 元素。查看代码似乎很多取决于只有一个 CN。CN 本身被用作 ssl 会话的用户名,我认为拥有多个没有意义。

于 2011-12-30T19:22:06.123 回答