我正在使用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}]}]}}
通過堆棧跟蹤的最後兩行看,我發現所涉及的兩個文件:
的問題是,我已經不會讀也不會寫之前二郎,所以我不知道爲什麼find_by_type被拋出異常。我最好的猜測是,因爲在相對DN(RDN)列表中有兩個CN = *元素,所以調用列表的結果是:flatten是一個數組,而預期的結果是一個標量。
有人可以熟悉erlang請確認或糾正我的假設嗎?如果您看到可以改進代碼以處理我剛纔描述的情況(而不是拋出異常)的方式,那麼我會非常感激,以便我可以在RabbitMQ郵件列表中對其進行建議。
雖然我同意有兩個CN沒什麼意義,但這是它在Windows上的工作方式。域用戶在CN = Users,DC = domain,DC = tld中創建,這意味着用戶將擁有包含兩個CN元素的DN。 – 2011-12-30 19:42:00
嗯,奇怪。如果您只想忽略第一個CN,則可以將find_by_type中的[_,CN]添加到案例中,而不是[CN]。但更多的是臨時性的解決方案,而不是你想在生產中想要的任何東西。 – Lukas 2011-12-30 20:13:35
我不想完全忽略它。基於openssl的證書只能有一個CN元素。作爲臨時修復,我寧願首先檢查數組是否有多個元素,如果是這樣,只需使用第一個元素。代碼是什麼樣的? – 2011-12-30 21:04:58