ssl - 这个 erlang 代码抛出异常,我不知道为什么

标签 ssl erlang rabbitmq flatten

我正在使用 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 邮件列表中提出建议。

最佳答案

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

关于ssl - 这个 erlang 代码抛出异常,我不知道为什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8683006/

相关文章:

docker - Docker Rabbitmq镜像失败,并显示[错误] Cookie字符串太短

erlang - 在连接的节点上产生的进程获得相同的 PID

caching - 如何使用 Elixir ets 创建复杂查询

erlang - 为什么使用 escript 生成的进程显示没有输出

linux - Rabbitmq 服务器启动失败

rabbitmq - 如何获取从rabbitmq启动到rabbitmq服务器停止的连接数

Android https请求,ssl协议(protocol)失败

apache - 在一个ip和一个端口上服务多个域

ssl - 对称加密 key 与非对称 key - ssl

SSL 证书在 SOAPUI 中有效,但在 Jmeter2.13 中无效