2011-12-30 180 views
0

我正在使用Windows證書頒發機構(AD CS)爲RabbitMQ Windows服務和客戶端之間的安全連接中的參與者頒發證書。此erlang代碼會引發異常,我不知道爲什麼

我的客戶證書的主題是LDAP我的專有名稱(DN): 「CN =約翰·魯伊茲,CN =用戶,DC = devexample,DC = COM」

當我嘗試建立這種連接,服務器拋出一個異常,並關閉連接,我看到兔子日誌本二郎堆棧跟蹤:

=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

的問題是,我已經不會讀也不會寫之前二郎,所以我不知道爲什麼find_by_type被拋出異常。我最好的猜測是,因爲在相對DN(RDN)列表中有兩個CN = *元素,所以調用列表的結果是:flatten是一個數組,而預期的結果是一個標量。

有人可以熟悉erlang請確認或糾正我的假設嗎?如果您看到可以改進代碼以處理我剛纔描述的情況(而不是拋出異常)的方式,那麼我會非常感激,以便我可以在RabbitMQ郵件列表中對其進行建議。

回答

1

你的猜測是正確的。它崩潰,因爲有兩個CN = *元素。看代碼看起來好像很多,這取決於只有一個CN。 CN本身被用作ssl會話的用戶名,我認爲有多個意義不大。

+0

雖然我同意有兩個CN沒什麼意義,但這是它在Windows上的工作方式。域用戶在CN = Users,DC = domain,DC = tld中創建,這意味着用戶將擁有包含兩個CN元素的DN。 – 2011-12-30 19:42:00

+0

嗯,奇怪。如果您只想忽略第一個CN,則可以將find_by_type中的[_,CN]添加到案例中,而不是[CN]。但更多的是臨時性的解決方案,而不是你想在生產中想要的任何東西。 – Lukas 2011-12-30 20:13:35

+0

我不想完全忽略它。基於openssl的證書只能有一個CN元素。作爲臨時修復,我寧願首先檢查數組是否有多個元素,如果是這樣,只需使用第一個元素。代碼是什麼樣的? – 2011-12-30 21:04:58

相關問題